pymysql
pymysql 是 Python 中操作MYSQL 的模块,其使用方法和MySQLdb 几乎相同。
下载安装:pip install pymysql
连接数据库
注意事项
在进行以下内容之前需要注意:
- 你有一个MySQL数据库,并且已经启动
- 你有可以连接该数据库的用户名和密码
- 你有一个有权限操作的 database
基本使用
# 导入 pymysql 模块 import pymysql # 创建链接 conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8") # 创建光标 cu = conn.cursor() # 要执行的 SQL 语句 sql = "insert into s8(username, password) VALUE (%s, %s);" # 执行 SQL 语句,并接收受影响的行数 ret = cu.execute(sql, ("xiaoming", "123")) # 将数据提交到数据库,否则数据就没有添加到表中 conn.commit() # 关闭光标 cu.close() # 断开链接 conn.close() # 打印受影响的行数 print(ret) # 结果 1
增删改查操作
1、增
# 导入pymysql 模块 import pymysql # 连接 database conn = pymysql.connect(host="你的数据库地址", user="用户名", password="密码", database="数据库名", charset="uft8") # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 要执行的SQL语句 sql = "insert into s8(username, password) VALUES (%s, %s);" name = "Alex" pwd = "123" # 执行SQL语句 cursor.execute(sql,[name, pwd]) # 这里的第二个参数必须是元组或者列表的形式 # 提交事务 在对表中的记录做增、删、改的时候必须要提交事务,否则所做动作无效 conn.commit() # 释放光标 cursor.close() # 断开链接 conn.close()
当数据插入失败的时候进行回滚
# 当插入数据失败的时候进行回滚操作 # 导入模块 import pymysql # 链接database conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8") # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 将要执行的SQL语句 sql = "insert into s8(username,password) VALUES (%s,%s);" # 判断数据插入操作是否成功,若没有成功,则使用回滚操作 try: # 执行SQL语句 cursor.execute(sql,["xiaoming", "678"]) # 提交事务 conn.commit() # 如果不成功,则执行以下代码 except Exception as e: conn.rollback() # 释放光标 cursor.close() # 断开连接 conn.close()
获取插入数据的ID(关联的时候会用到)
# 当插入数据失败的时候进行回滚操作 # 导入模块 import pymysql # 链接database conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8") # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 将要执行的SQL语句 sql = "insert into s8(username,password) VALUES (%s,%s);" # 判断数据插入操作是否成功,若没有成功,则使用回滚操作 try: # 执行SQL语句 cursor.execute(sql, ["xiaoming", "678"]) # 提交事务 conn.commit() # 提交之后获取刚刚插入的数据的ID last_jilu_id = cursor.lastrowid # 如果不成功,则执行以下代码 except Exception as e: conn.rollback() # 释放光标 cursor.close() # 断开连接 conn.close()
批量执行操作
# 批量执行 # 导入模块 import pymysql # 链接database conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8") # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 将要执行的SQL语句 sql = "insert into s8 (username,password) VALUES (%s,%s);" data = [("xiaohong","123"),("xiaoming", "123"),("xiaolan","123")] # 判断数据插入操作是否成功,若没有成功,则使用回滚操作 try: # 执行SQL语句 cursor.executemany(sql, data) # 提交事务 conn.commit() # 如果不成功,则执行以下代码 except Exception as e: conn.rollback() print(e) # 释放光标 cursor.close() # 断开连接 conn.close()
2、删除(也可以进行批量操作)
# 删除操作 # 导入模块 import pymysql # 链接database conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8") # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 将要执行的SQL语句 sql = "delete from s8 where username = %s;" # 判断数据插入操作是否成功,若没有成功,则使用回滚操作 try: # 执行SQL语句 cursor.execute(sql, ("xiaohong",)) # 提交事务 conn.commit() # 如果不成功,则执行以下代码 except Exception as e: conn.rollback() print(e) # 释放光标 cursor.close() # 断开连接 conn.close()
3、修改(这里写的是批量操作的例子)
# 删除操作 # 导入模块 import pymysql # 链接database conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8") # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 将要执行的SQL语句 sql = "update s8 set username=%s where username=%s;" # 判断数据插入操作是否成功,若没有成功,则使用回滚操作 data = [("xh", "xiaohong"), ("xm", "xiaoming"), ("xl", "xiaolan")] try: # 执行SQL语句 cursor.executemany(sql, data) # 提交事务 conn.commit() # 如果不成功,则执行以下代码 except Exception as e: conn.rollback() print(e) # 释放光标 cursor.close() # 断开连接 conn.close()
4、查询操作
查询单条数据
# 导入模块 import pymysql # 链接database conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8") # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 将要执行的SQL语句 sql = "select * from s8 where id>1;" # 执行SQL语句 cursor.execute(sql) # 获取查询到的单条数据 ret = cursor.fetchone() # 释放光标 cursor.close() # 断开连接 conn.close() print(ret)
查询多条数据
# 导入模块 import pymysql # 链接database conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8") # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 将要执行的SQL语句 sql = "select * from s8 where id>1;" # 执行SQL语句 cursor.execute(sql) # 获取查询到的多条数据 ret = cursor.fetchmany(5) # 查询所有的记录,但是之前使用多条数据查询的时候光标已经移到了id=52之后,此时是从id=53开始查询的 after_all = cursor.fetchall() # 释放光标 cursor.close() # 断开连接 conn.close() print(ret) print(after_all)
进阶用法
# 使用 fetchmany(num) 可以获取指定数量的数据 # 例如: cursor.fetchmany(4) # 光标按绝对位置移动 # 1、absolute cursor.scroll(1,mode="absolute") # 2、relative cursor.scroll(-3,mode="relative") # absolute 中的第一个参数指的是相对于查询条件查询的结果来移动光标的。当参数为0时,光标指向的是查询结果的第0位的位置,这个参数不能为负值 # relative 中的第一个参数指的是相对于当前位置来移动光标,可以为负数