基本使用
首先要下载 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的资料请关注其它相关文章!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章