Python pymsql模块的使用
基本使用
首先要下载pymysql
pipinstallpymsql
以下是pymysql的基本使用
importpymysql
#链接,C/S架构,TCP链接
conn=pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor,#记录结果,字典显示
#password="yourpassword",
)
#游标
cursor=conn.cursor()
#执行sql
sql="showtables"
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()时,不可传入表名,数据库名。否则会抛出语法错误,这是因为在拼接时会自动添加上``号
importpymysql
#链接
conn=pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor,#记录结果,字典显示
#password="yourpassword",
)
#游标
cursor=conn.cursor()
#执行sql
sql="select*fromt1whereid=%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即可自动提交事务。
importpymysql
#链接
conn=pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor,#记录结果,字典显示
autocommit=True,#自动提交
#password="yourpassword",
)
#游标
cursor=conn.cursor()
#执行sql
sql="insertintot1(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操作。
importpymysql
#链接
conn=pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor,#记录结果,字典显示
autocommit=True,#自动提交
#password="yourpassword",
)
#游标
cursor=conn.cursor()
#执行sql
sql="insertintot1(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条记录 |
如果我们想获取记录,可使用以下三个方法
| 命令解析 | 描述 |
|---|---|
| cursor.fetchone() | 获取第一条记录,游标向下移动一行 |
| cursor.fetchmany(2) | 获取接下来的两条记录,游标向下移动两行 |
| cursor.fetchall() | 获取全部记录,游标移动到末尾,返回的是一个列表 |
importpymysql
#链接
conn=pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor,#记录结果,字典显示
autocommit=True,#自动提交
#password="yourpassword",
)
#游标
cursor=conn.cursor()
#执行sql
sql="select*fromt1"#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行号
importpymysql
#链接
conn=pymysql.connect(
host="localhost",
database="db1",
charset="utf8mb4",
user="root",
cursorclass=pymysql.cursors.DictCursor,#记录结果,字典显示
autocommit=True,#自动提交
#password="yourpassword",
)
#游标
cursor=conn.cursor()
#执行sql
sql="insertintot1(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()
以上就是Pythonpymsql模块的使用的详细内容,更多关于Pythonpymsql的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。