首页 / MYSQL / pymysql的基本使用
pymysql的基本使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了pymysql的基本使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3339字,纯文字阅读大概需要5分钟。
内容图文
TOC序
当我们在写程序中需要使用到数据库的时候,尽量在代码层次实现一些限制,例如两张表,我们不再使用外键去关联表与表之间的关系,我们可以在程序层面修改其中的一张表,再去修改另一张表的数据,这样会减轻数据库的压力,代码层次可以实现的,就不要再去使用数据库。
pymysql的语法
import pymysql # 下载并导入pymysql模块
# 建立连接,并产生一个连接会话对象
conn = pymysql.connect(
user=‘root‘,
password=‘123‘,
host=‘127.0.0.1‘,
port=3306, # 注意:端口号不需要用引号引起来
charset=‘utf8‘,
database=‘db1‘
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象
# cursor=pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
# 若不加,则返回的是括号加数据,例如:(1, 张三),不会显示表中的字段,很不方便
sql = ‘select * from user_info‘ # 语句后可不加分号,pymysql会自动添加
res = cursor.execute(sql) # 执行sql语句
# print(res) # execute返回的是当前sql语句所影响的行数,并不是查询结构
# ret = cursor.fetchone() # 只获取查询的结果中的一条数据
# ret = cursor.fetchall() # 获取查询结果的全部数据
# ret = cursor.fetchmany(2) # 获取指定行数的数据,如果数字超了,也不会报错
# print(ret)
print(cursor.fetchone())
print(cursor.fetchone()) # 连续使用2次,并不会重复展示表中的第一条数据,执行一次取掉一次数据,执行第二次就取表中的第二行数据
# 相对移动
cursor.scroll(2, ‘relative‘) # 基于指针所在的位置 往后偏移
# 绝对移动
cursor.scroll(1, ‘absolute‘) # 基于起始位置,往后偏移
sql注入问题
import pymysql # 下载并导入pymysql模块
# 建立连接,并产生一个连接会话对象
conn = pymysql.connect(
user=‘root‘,
password=‘123‘,
host=‘127.0.0.1‘,
port=3306, # 注意:端口号不需要用引号引起来
charset=‘utf8‘,
database=‘db1‘
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象
# cursor=pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
# 若不加,则返回的是括号加数据,例如:(1, 张三),不会显示表中的字段,很不方便
sql = ‘select * from user_info‘ # 语句后可不加分号,pymysql会自动添加
res = cursor.execute(sql) # 执行sql语句
# print(res) # execute返回的是当前sql语句所影响的行数,并不是查询结构
# ret = cursor.fetchone() # 只获取查询的结果中的一条数据
# ret = cursor.fetchall() # 获取查询结果的全部数据
# ret = cursor.fetchmany(2) # 获取指定行数的数据,如果数字超了,也不会报错
# print(ret)
print(cursor.fetchone())
print(cursor.fetchone()) # 连续使用2次,并不会重复展示表中的第一条数据,执行一次取掉一次数据,执行第二次就取表中的第二行数据
# 相对移动
cursor.scroll(2, ‘relative‘) # 基于指针所在的位置 往后偏移
# 绝对移动
cursor.scroll(1, ‘absolute‘) # 基于起始位置,往后偏移
利用特殊符号和注释语法 巧妙的绕过真正的sql校验
关键性的数据 不要自己手动去拼接 而是交由execute帮你去做拼接
采用手动拼接的情况
import pymysql
conn = pymysql.connect(
user=‘root‘,
password=‘123‘,
host=‘localhost‘,
port=3306,
charset=‘utf8‘,
database=‘db1‘
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
username = input(‘username>>‘).strip()
password = input(‘password>>‘).strip()
sql = "select * from user_info where name = ‘%s‘ and password = ‘%s‘" % (username, password)
# sql = ‘select * from user_info where name = "%s" and password = "%s"‘ % (username, password)
# select * from user_info where name = "张三‘ -- fhjkasdhfkla" and password = "" 外层使用单引号出不来效果
print(sql)
cursor.execute(sql)
res = cursor.fetchall()
if res:
print(res)
else:
print(‘username or password error!‘)
解决办法:
交给pymysql中的execute进行处理
import pymysql
conn = pymysql.connect(
user=‘root‘,
password=‘123‘,
host=‘localhost‘,
port=3306,
charset=‘utf8‘,
database=‘db1‘
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
username = input(‘username>>‘).strip()
password = input(‘password>>‘).strip()
# sql = "select * from user_info where name = ‘%s‘ and password = ‘%s‘" % (username, password)
# sql = ‘select * from user_info where name = "%s" and password = "%s"‘ % (username, password)
# select * from user_info where name = "张三‘ -- fhjkasdhfkla" and password = "" 外层使用单引号出不来效果
sql = "select * from user_info where name = %s and password = %s"
print(sql)
# cursor.execute(sql)
cursor.execute(sql, (username, password))
res = cursor.fetchall()
if res:
print(res)
else:
print(‘username or password error!‘)
数据的增删查改
尝试进行增操作:
import pymysql
conn = pymysql.connect(
user=‘root‘,
password=‘123‘,
host=‘localhost‘,
port=3306,
charset=‘utf8‘,
database=‘db1‘
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = ‘insert into user_info(name, password) value("刘和平", 17)‘
res = cursor.execute(sql)
print(res)
让我们去表中看看,是否增加上去:
显然,并没有新增一条数据。
在pymysql中,如果进行增删改等操作,对于这些执行重要程度偏高的语句,需要有一步确认操作(commit):
import pymysql
conn = pymysql.connect(
user=‘root‘,
password=‘123‘,
host=‘localhost‘,
port=3306,
charset=‘utf8‘,
database=‘db1‘
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = ‘insert into user_info(name, password) value("刘和平", 17)‘
res = cursor.execute(sql)
conn.commit() # 提交
print(res)
观察表中的数据:
原文:https://www.cnblogs.com/cnhyk/p/12050763.html
内容总结
以上是互联网集市为您收集整理的pymysql的基本使用全部内容,希望文章能够帮你解决pymysql的基本使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。