Python pymsql模块的使用
基本使用
首先要下载 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()# 执行sqlsql = '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()# 执行sqlsql = '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()# 执行sqlsql = '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()# 执行sqlsql = '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()# 执行sqlsql = 'select * from t1' # t1表中4条记录cursor.execute(sql)print(cursor.fetchone()) 游标移动到2的位置cursor.scroll(2,mode=’relative’) 向下移动2,当前游标为4print(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()# 执行sqlsql = '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的资料请关注好吧啦网其它相关文章!
相关文章:
