介绍
pymysql是在Python3.x版本中用于连接MySQL服务器的一个库
Python2中则使用mysqldb
官方文档:
https://pypi.org/project/PyMySQL/
https://pymysql.readthedocs.io/en/latest/index.html
安装
pip安装
pip install pymysql
pip3 install pymysql
git安装
git clone https://github.com/PyMySQL/PyMySQL
cd PyMySQL/
python3 setup.py install
使用
简单的使用
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='root',
database='day41',
charset='utf8',
autocommit=True,
)
cursor = conn.cursor()
data = cursor.execute("select * from class")
# print(cursor.rowcount)
# print(cursor.fetchone())
# print(cursor.fetchmany(aa))
# print(cursor.fetchall())
cursor.close()
conn.close()
连接 connect()
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='root',
database='day41',
charset='utf8',
autocommit=True,
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
'''
conn = pymysql.connect() 用来链接mysql的,so必须要传入链接信息
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) 建立游标,后面通过游标来执行sql语句,pymysql.cursors.DictCursor设置返回的结果为字典形式,默认是元组
'''
connet()参数说明
参数 | 说明 |
---|---|
host | 字符串,主机ip地址 |
port | 整数,mysql的端口 默认是3306 如果修改了,填写修改之后的 |
user | 字符串,mysql的登录用户 |
password | 字符串,mysql的登录用户的密码。 也可以写成 passwd 它是password的一个别名,主要用来兼容mysqldb |
database | 字符串,数据库的名称,也可以写成 db 它是database的一个别名,也用来兼容mysqldb |
charset | 字符串,设置字符编码,通常设置utf8,注意不是utf-8,这里是没有 - 的 |
autocommit | 布尔类型,自动提交,默认是false,如果不设置为true,则后续要手动提交,conn.commit(),如果忘记写了那么你执行sql返回正常但是实际在数据库当中是没有操作的。 |
执行sql
cursor.execute(sql, args=None) # 执行单条sql语句
cursor.executemany(sql, args) # 执行多条语句
execute() 参数说明
参数 | 说明 |
---|---|
sql | 字符串, 执行的sql语句,根据args来进行格式化 |
args | 可选项,默认为None,能传入list,tuple,dict类型的数据。如果是list,tuple类型数据,sql中用 %s 来占位。如果是dict类型输入,sql中用 %(name)s 来占位 |
小实例 sql,args默认
小实例 sql,args = list
小实例 sql,args = tuple
小实例 sql,args = dict
executemany()参数说明
参数 | 说明 |
---|---|
sql | 字符串, 执行的sql语句,根据args来进行格式化 |
args | list类型,在sql中用 %s 来占位 |
小实例 executemany(sql, args)
返回结果
cursor.rowcount # 返回受影响的行数
cursor.fetchone() # 只返回一条数据
cursor.fetchmany(size) # 返回指定条数的数据 size默认是None
cursor.fetchall() # 返回所有的数据
小实例 fetchone()
小实例 fetchall()
小实例 fetchmany
游标 scroll 走A
接收两个参数
参数 | 说明 |
---|---|
value | 移动的位数 |
mode | relative 相对移动,相对前一个来移动 默认是它。absolute 绝对移动 |
小实例 relative
Thinking~
准确的说第二个fetchone()应该获取的是id为2的数据,但是这里显示的是id为4的数据 why?
scroll(2) 由于默认是relative so 它是相对id为1的数据,跳过2条记录,所有后面的fetchone()获取的是第4条数据
小实例 absolute
Thinking~
第二次fetchone()应该是返回id为2的数据,但是这里还是返回的id为1的数据 why
Because scroll(0) 把游标移动到数据第一行啦,absolute就是相对于整个查询出来的数据的索引来说,如果是scroll(1,“absolute”) 就是游标移动到第二行。
疑问 小伙子不是写的scroll(1,“absolute”) 怎么是第二行,写的1呀 ⚠️ 查询出来的数据的索引是从0开始的奥,so 1 其实就是第二行数据
sql注入 奇阴技巧 ⭐️⭐️⭐️⭐️⭐️
小菜鸟的sql语句
卧槽卧槽卧槽怎么回事?
大菜鸟的sql语句
十年DBA的sql语句
Thinking~
sql注入就是利用 sql语句的–注释,来搞事情的,所有小菜鸟没有做处理,整个用户的账号信息都被拿走了
大菜鸟在代码块做来逻辑的手动判断
DBA的没有做处理,它是交给pymysql去做的处理了,so raise error
不能忘记的,擦屁股
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='root',
database='day41',
charset='utf8',
autocommit=True,
)
cursor = conn.cursor()
data = cursor.execute("select * from class")
cursor.close() # 关闭游标 ⭐️⭐️⭐️⭐️⭐️
conn.close() # 关闭连接 ⭐️⭐️⭐️⭐️⭐️