pymysql
安装
前提是安装了python3.x和pip
1 | pip install pymysql |
我安装的版本是0.7.11,如下命令可查看当前版本
1 2 3 | >>> import pymysql >>> print (pymysql.VERSION) ( 0 , 7 , 11 , None ) |
Django 链接mysql
第一步:settings.py
1 2 3 4 5 6 7 8 9 10 | DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.mysql' , 'NAME' : 'testdjango' , # 你的数据库名称 'USER' : 'root' , # 你的数据库用户名 'PASSWORD' : '123456' , # 你的数据库密码 'HOST' : '' , # 你的数据库主机,留空默认为localhost 'PORT' : '3306' , # 你的数据库端口 } } |
第二步:在app或者项目的初始化文件(__init__.py)中加入:
1 2 3 | import pymysql pymysql.install_as_MySQLdb() |
基本操作
准备工作
先用MySQL创建一个数据库和表 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | mysql> create database db1; Query OK, 1 row affected ( 0.00 sec) mysql> use db1; Database changed mysql> create table t1( - > id int primary key auto_increment, - > name varchar( 20 ), - > age int ( 3 )); Query OK, 0 rows affected ( 0.03 sec) mysql> insert into t1(name,age) values - > ( 'lcg' , '25' ); Query OK, 1 row affected ( 0.01 sec) mysql> select * from t1; + - - - - + - - - - - - + - - - - - - + | id | name | age | + - - - - + - - - - - - + - - - - - - + | 1 | lcg | 25 | + - - - - + - - - - - - + - - - - - - + 1 row in set ( 0.00 sec) |
pymysql操作
运行环境 pycharm5.0.5 (python3.6)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import pymysql # 创建链接 conn = pymysql.connect( host = '127.0.0.1' , port = 3306 , user = 'root' , password = 'lcgsmile' , database = 'db1' , charset = 'utf8' ) # 拿到游标 cur = conn.cursor() # 插入;cur.execute(...)返回值是受影响条数 insert_sql = 'insert into t1(name,age) values(%s,%s);' cur.execute(insert_sql, ( 'lcg1' , '26' )) # 如果是更新和新增记录必须commit才能生效 conn.commit() # 关闭游标 cur.close() # 关闭连接 conn.close() |
执行上面命令再查数据库 可以看到,多了一条记录:
1 2 3 4 5 6 7 8 | mysql> select * from t1; + - - - - + - - - - - - + - - - - - - + | id | name | age | + - - - - + - - - - - - + - - - - - - + | 1 | lcg | 25 | | 2 | lcg1 | 26 | + - - - - + - - - - - - + - - - - - - + 2 rows in set ( 0.00 sec) |
插入多条
1 | cur.executemany(insert_sql,[( 'lcg2' , '27' ),( 'lcg3' , '28' )]) |
删除id=1的
1 2 | del_sql = 'delete from t1 where id=1' cur.execute(del_sql) |
查找:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pymysql conn = pymysql.connect( host = '127.0.0.1' , port = 3306 , user = 'root' , password = 'lcgsmile' , database = 'db1' , charset = 'utf8' ) cur = conn.cursor() select_sql = 'select * from t1' cur.execute(select_sql) f_one = cur.fetchone() # 返回游标后的第一条记录 f_many = cur.fetchmany( 2 ) # 返回指定条数 f_all = cur.fetchall() # 全部返回 cur.close() conn.close() print (f_one,f_many,f_all) # (2, 'lcg1', 26) # ((3, 'lcg2', 27), (4, 'lcg3', 28)) # () # 因为没有了所以返回空元祖。 |
注意:
1 2 3 4 5 6 7 8 9 | cursor = conn.cursor() # 执行完毕返回的结果集默认以元组显示 fetchall和fetchmany返回二维元组(元组中含有元组),如果没有结果 则返回 () fetchone只返回一维元组,如果没有结果 则返回 None 需要注明:在MySQL中是NULL,而在Python中则是 None # 下面设置返回结果为字典形式。 cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) |
移动游标
1 2 | cursor.scroll( 3 ,mode = 'absolute' ) # 相对绝对位置移动 cursor.scroll( 3 ,mode = 'relative' ) # 相对当前位置移动 |
补充
1.示例学生-教师-班级增删改的一个小总结

import pymysql def sql_get_all(sql, args=None): # fetchall()查询 conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123", db="db1", charset="utf8") cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 查询结果设置为字典形式 cursor.execute(sql,args) result = cursor.fetchall() cursor.close() conn.close() return result def sql_get_one(sql, args=None): # fetchone()查询 conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123", db="db1", charset="utf8") cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(sql,args) result = cursor.fetchone() cursor.close() conn.close() return result def sql_run(sql, args=None): # 执行SQL语句 conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123", db="db1", charset="utf8") cursor = conn.cursor() cursor.execute(sql,args) conn.commit() cursor.close() conn.close()
查全部:
1 | class_dict = sql_get_all( 'select*from class' ) |
插入:
1 2 | sql = 'insert into class(name) values(%s)' sql_run(sql, classname) |
更新:
1 2 | sql = 'update class set name=%s where id=%s' sql_run(sql, [cname, cid]) |
按照条件查:
1 2 | sql = 'select * from class where id=%s' class_dict = sql_get_one(sql, cid) |
按照条件删除:
1 2 | sql = 'delete from class where id = %s' sql_run(sql, cid) |
精彩在继续......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了