基本使用
首先要下载 pymysql
pip install pymsql
以下是 pymysql
的基本使用
import pymysql # 链接,C/S架构,TCP链接 conn = pymysql.connect( host="localhost", database="db1", charset="utf8mb4", user="root", cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示 # password = "your password", ) # 游标 cursor = conn.cursor() # 执行sql sql = "show tables" res = cursor.execute(sql) # 提交执行,返回sql影响成功的行数 print(res) # 2 代表该数据库下有2个表 print(cursor.fetchall()) # [{'Tables_in_db1': 't1'}, {'Tables_in_db1': 't2'}] cursor.close() # 关闭游标 conn.close()
游标概念
可以看到在上面的示例中有一个游标的概念,其实这个也非常简单,就等同于光标的上下移动,每移动一次代表一条记录。
在 pymsql
中,对于 select
等操作返回的结果都可以通过游标的移动配合相应方法函数来进行读取。
sql注入
如果你的某些 sql
语句要进行字符串拼接,那么一定要使用 pymysql
提供的 execute()
方法进行拼接,不要去用 python 中的 %
或 format()
方法,这可能导致出现 sql 注入问题带来不安全的隐患。
注意:使用 execute()
时,不可传入表名,数据库名。否则会抛出语法错误,这是因为在拼接时会自动添加上``号
import pymysql # 链接 conn = pymysql.connect( host="localhost", database="db1", charset="utf8mb4", user="root", cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示 # password = "your password", ) # 游标 cursor=conn.cursor() # 执行sql sql = "select * from t1 where id=%s" res = cursor.execute(sql,("1",)) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题 print(res) # 1 查出一条记录 print(cursor.fetchall()) # 拿到所有记录的结果 cursor.close() # 关闭游标 conn.close()
事务提交
在执行 UPDATE/INSERT/DELETE
之类的操作,必须使用 conn.commit()
进行事务提交后方可生效。
或者你可以在实例化 conn
对象时为他指定 auto_commit
参数为 true
即可自动提交事务。
import pymysql # 链接 conn = pymysql.connect( host="localhost", database="db1", charset="utf8mb4", user="root", cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示 autocommit = True, # 自动提交 # password = "your password", ) # 游标 cursor=conn.cursor() # 执行sql sql = "insert into t1(name) values(%s)" res = cursor.execute(sql,("新记录",)) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题 print(res) # 1 成功插入一条记录 print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号 print(cursor.fetchall()) # conn.commit() # 手动提交 cursor.close() # 关闭游标 conn.close()
提交多条
使用 cursor.executemany()
方法可一次性提交多条 sql 操作。
import pymysql # 链接 conn = pymysql.connect( host="localhost", database="db1", charset="utf8mb4", user="root", cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示 autocommit = True, # 自动提交 # password = "your password", ) # 游标 cursor=conn.cursor() # 执行sql sql = "insert into t1(name) values(%s)" # 同一条命令,执行3次 res = cursor.executemany(sql,[("新记录1"),("新纪录2"),("新纪录3")]) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题 print(res) # 3 成功插入三条记录 print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号 print(cursor.fetchall()) cursor.close() # 关闭游标 conn.close()
游标相关
获取到一条记录后,我们可以控制游标移动。
也可以控制查看游标后的多少条记录
游标每移动一次代表一条记录
命令解析
描述
cursor.scroll(3,mode='absolute')
游标以绝对位置向后移动3条记录
cursor.scroll(3,mode='relative')
游标以当前位置向后移动3条记录
注意:游标移动的条数即为记录的条数,如果移动值为负N就代表上N条记录
如果我们想获取记录,可使用以下三个方法
命令解析
描述
cursor.fetchone()
获取第一条记录,游标向下移动一行
cursor.fetchmany(2)
获取接下来的两条记录,游标向下移动两行
cursor.fetchall()
获取全部记录,游标移动到末尾,返回的是一个列表
import pymysql # 链接 conn = pymysql.connect( host="localhost", database="db1", charset="utf8mb4", user="root", cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示 autocommit = True, # 自动提交 # password = "your password", ) # 游标 cursor=conn.cursor() # 执行sql sql = "select * from t1" # t1表中4条记录 cursor.execute(sql) print(cursor.fetchone()) 游标移动到2的位置 cursor.scroll(2,mode='relative') 向下移动2,当前游标为4 print(cursor.fetchone()) cursor.close() # 关闭游标 conn.close() """ {'id': 1, 'name': '记录1'} {'id': 4, 'name': '记录4'} """
插入行号
如果执行的是 INSERT
操作,可以在插入后查看最后插入的 ID 行号
import pymysql # 链接 conn = pymysql.connect( host="localhost", database="db1", charset="utf8mb4", user="root", cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示 autocommit = True, # 自动提交 # password = "your password", ) # 游标 cursor=conn.cursor() # 执行sql sql = "insert into t1(name) values(%s)" # 同一条命令,执行3次 res = cursor.executemany(sql,[("新记录1"),("新纪录2"),("新纪录3")]) # 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题 print(res) # 3 成功插入三条记录 print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号 print(cursor.fetchall()) # conn.commit() # 手动提交 cursor.close() # 关闭游标 conn.close()
以上就是Python pymsql模块的使用的详细内容,更多关于Python pymsql的资料请关注其它相关文章!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 中国武警男声合唱团《辉煌之声1天路》[DTS-WAV分轨]
- 紫薇《旧曲新韵》[320K/MP3][175.29MB]
- 紫薇《旧曲新韵》[FLAC/分轨][550.18MB]
- 周深《反深代词》[先听版][320K/MP3][72.71MB]
- 李佳薇.2024-会发光的【黑籁音乐】【FLAC分轨】
- 后弦.2012-很有爱【天浩盛世】【WAV+CUE】
- 林俊吉.2012-将你惜命命【美华】【WAV+CUE】
- 晓雅《分享》DTS-WAV
- 黑鸭子2008-飞歌[首版][WAV+CUE]
- 黄乙玲1989-水泼落地难收回[日本天龙版][WAV+CUE]
- 周深《反深代词》[先听版][FLAC/分轨][310.97MB]
- 姜育恒1984《什么时候·串起又散落》台湾复刻版[WAV+CUE][1G]
- 那英《如今》引进版[WAV+CUE][1G]
- 蔡幸娟.1991-真的让我爱你吗【飞碟】【WAV+CUE】
- 群星.2024-好团圆电视剧原声带【TME】【FLAC分轨】