MySQL之pymysql模块
PyMySQL介绍
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
Django中也可以使用PyMySQL连接MySQL数据库。
PyMySQL安装
1 | pip install pymysql |
连接数据库
注意事项
在进行本文以下内容之前需要注意:
- 你有一个MySQL数据库,并且已经启动。
- 你有可以连接该数据库的用户名和密码
- 你有一个有权限操作的database
基本使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import pymysql #s链接数据库 conn = pymysql.connect( host = '127.0.0.1' , #被连接数据库的ip地址 port = 3306, #数据库服务端端口号 user = 'root' , #用户名 password = '123456' , #密码 database = 'db1' , #选择库 charset = 'utf8' #编码格式 ) #拿到执行sql语句的游标 cur = conn.cursor() # 如果想要字典格式的查询结果,可以设置cursor属性,这样返回的就是一个字典形式的结果,key值为字段名,value为值 # cur_dic = conn.cursor(cursor=pymysql.cursors.DictCursor) #查询语句 select_sql = 'select * from auth' #执行sql语句 cur.execute(select_sql) #获取单条查询结果 # res1 = cur.fetchone() #获取指定行数的查询结果 # res2 = cur.fetchmany(3) #获取全部查询结果 res3 = cur.fetchall() #输出查询结果 #注意,如果有多条获取查询的语句,游标会从上一次的位置开始查询 #比如说如果有两条 cur.fetchall() 那么第二次查询结果为空 #可以用cur.scroll()方法来控制游标 # cur.scroll(n,mode='absolute') 移动到绝对位置 n # cur.scroll(n,mode='relative') 移动到相对位置 n print(res3) #插入语句 #可以直接写插入的值,也可以用%s来占位,然后传参 insert_sql = 'insert into auth (name,age,address) values (%s,%s,%s)' #传入参数的时候用元组或者列表来装插入值 cur.execute(insert_sql,( 'auth1' ,18, '北京' )) #如果要传多个参数值 cur.executemany(insert_sql,[( 'auth2' ,19, '北京' ),( 'auth3' ,20, '北京' )]) #提交数据 conn.commit() #关闭游标 cur.close() #关闭链接 conn.close() |
返回字典格式数据:
1 | cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) |
增删改查操作
增
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # 导入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() |
插入数据失败回滚
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 导入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(关联操作时会用到)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 导入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() |
批量执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # 导入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() |
删
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 导入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() |
改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 导入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() |
查
查询单条数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 导入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) |
查询多条数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 导入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) |
进阶用法
1 2 3 4 5 6 | # 可以获取指定数量的数据 cursor.fetchmany(3) # 光标按绝对位置移动1 cursor.scroll(1, mode= "absolute" ) # 光标按照相对位置(当前位置)移动1 cursor.scroll(1, mode= "relative" ) |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步