1.pymysql基本用法
创建连接conn conn创建游标对象cursor cursor执行(execute)sql语句 游标对象cursor 获取结果(fetchone、fetchall)
import pymysql
conn = pymysql.connect(
user = 'root',
password = '123',
host = '127.0.0.1',
port = 3306,
charset = 'utf8',
database = 'day36_1'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象 并以字典形式返回
# cursor=pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
sql = "select * from userinfo"
res = cursor.execute(sql) # 执行sql语句
# print(res) # execute返回的时候当前sql所影响的行数 返回数字2
# ret = cursor.fetchone() # 只获取查询结果中的一条数据 返回一条数据 光标依次向下读取
# # ret = cursor.fetchall() # 获取查询结果的所有数据
# # ret = cursor.fetchmany(2) # 指定获取几条数据 如果数字超了也不会报错
# # print(ret)
#
# print(cursor.fetchone())
# print(cursor.fetchone())
# # 相对移动
# # cursor.scroll(2,'relative') # 基于指针所在的位置 往后偏移
# # 绝对移动
# cursor.scroll(1,'absolute') # 基于起始位置 往后偏移
2.数据输出格式
cursor = conn.cursor() # 默认元组套元组的格式: ((1, 'tank2b', '123'), (2, 'egonnb', '123'))
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 设置为列表套字典的格式: [{'id': 1, 'username': 'tank2b', 'password': '123'}, {'id': 2, 'username': 'egonnb', 'password': '123'}]
3.SQL注入
sql注入问题
利用特殊符号和注释语法 巧妙的绕过真正的sql校验
关键性的数据 不要自己手动去拼接 而是交由execute帮你去做拼接
常见sql注入
SELECT USER from database WHERE username='a' or 1=1 绕过验证