PyMySQL模块的使用

一、PyMySQL介绍

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

Django中也可以使用PyMySQL连接MySQL数据库。

二、PyMySQL安装

pip install pymysql

三、连接数据库

1. 注意事项

在进行本文以下内容之前需要注意:

  • 你有一个MySQL数据库,并且已经启动。
  • 你有可以连接该数据库的用户名和密码
  • 你有一个有权限操作的database

2. 基本使用

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 定义要执行的SQL语句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE, age TINYINT NOT NULL )ENGINE=innodb DEFAULT CHARSET=utf8; """ # 执行SQL语句 cursor.execute(sql) # 关闭光标对象 cursor.close() # 关闭数据库连接 conn.close()
复制代码

返回字典格式数据:语法:在cursor(cursor=pymysql.cursors.DictCursor)  表示返回一个字典格式  (列表中放着多个字典)

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句并且将结果作为字典返回的游标 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 定义要执行的SQL语句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE, age TINYINT NOT NULL )ENGINE=innodb DEFAULT CHARSET=utf8; """ # 执行SQL语句 cursor.execute(sql) # 关闭光标对象 cursor.close() # 关闭数据库连接 conn.close()
复制代码

备注:特别注意:charset = "utf8",编码类型不要写成"utf-8"   cursor 不指定返回的类型时,默认返回一个元组类型的数据(大元祖里面放着小元组)。

四、增删改查操作

1. 增

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" username = "Alex" age = 18 # 执行SQL语句 cursor.execute(sql, [username, age]) # 提交事务 conn.commit() cursor.close() conn.close()
复制代码

插入数据失败回滚

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" username = "Alex" age = 18 try: # 执行SQL语句  cursor.execute(sql, [username, age]) # 提交事务  conn.commit() except Exception as e: # 有异常,回滚事务  conn.rollback() cursor.close() conn.close()
复制代码

获取插入数据的ID(关联操作时会用到)

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" username = "Alex" age = 18 try: # 执行SQL语句  cursor.execute(sql, [username, age]) # 提交事务  conn.commit() # 提交之后,获取刚插入的数据的ID last_id = cursor.lastrowid except Exception as e: # 有异常,回滚事务  conn.rollback() cursor.close() conn.close()
复制代码

批量执行

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);" data = [("Alex", 18), ("Egon", 20), ("Yuan", 21)] try: # 批量执行多条插入SQL语句  cursor.executemany(sql, data) # 提交事务  conn.commit() except Exception as e: # 有异常,回滚事务  conn.rollback() cursor.close() conn.close()
复制代码

2. 删

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() sql = "DELETE FROM USER1 WHERE id=%s;" try: cursor.execute(sql, [4]) # 提交事务  conn.commit() except Exception as e: # 有异常,回滚事务  conn.rollback() cursor.close() conn.close()
复制代码

3. 改

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 修改数据的SQL语句 sql = "UPDATE USER1 SET age=%s WHERE name=%s;" username = "Alex" age = 80 try: # 执行SQL语句  cursor.execute(sql, [age, username]) # 提交事务  conn.commit() except Exception as e: # 有异常,回滚事务  conn.rollback() cursor.close() conn.close()
复制代码

 

4. 查

查询单条数据

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 查询数据的SQL语句 sql = "SELECT id,name,age from USER1 WHERE id=1;" # 执行SQL语句 cursor.execute(sql) # 获取单条查询数据 ret = cursor.fetchone() cursor.close() conn.close() # 打印下查询结果 print(ret)
复制代码

查询多条数据

复制代码
# 导入pymysql模块
import pymysql
# 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 查询数据的SQL语句 sql = "SELECT id,name,age from USER1;" # 执行SQL语句 cursor.execute(sql) # 获取多条查询数据 ret = cursor.fetchall() cursor.close() conn.close() # 打印下查询结果 print(ret)
复制代码

 五、进阶用法

复制代码
# 可以获取指定数量的数据   
cursor.fetchmany(3)   
# 光标按绝对位置移动1
cursor.scroll(1, mode="absolute") # 光标按照相对位置(当前位置)移动1 可以为负数,超出范围直接报错 IndexError cursor.scroll(1, mode="relative")
复制代码

 

给SQL语句中传参也可以使用字典的形式:

  比如:  sql = 'select salary,age from person where name=%(name)s'

cursor.execute(sql,{name:‘值’})

 

六、补充

1. LIKE 查询 % 问题

sql_info = cursor.fetch_all('SELECT id,`name`,remark,phone,classify_id,title_img FROM store WHERE `name` LIKE %s',('%'+key+'%'))

注意:%s前后不能加引号否则会导致查询失败

 

你可能感兴趣的:(PyMySQL模块的使用)