1 2 3 4

pymysql模块与sql注入

pymysql模块支持python代码操作数据库MySQL

下载:
pip3 install pymysql

示例:

import pymysql

conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='day48',
charset='utf8' # 编码千万不要加-
) # 链接数据库
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象(就是用来帮你执行命令的)
"""
cursor=pymysql.cursors.DictCursor将查询结果以字典的形式返回
"""
sql = 'select * from teacher;'
res = cursor.execute(sql)
# print(res) # execute返回的是你当前sql语句所影响的行数 改返回值一般不用
# 获取命令执行的查询结果
# print(cursor.fetchone()) # 只拿一条
# print(cursor.fetchall()) # 拿所有
# print(cursor.fetchmany(2)) # 可以指定拿几条
print(cursor.fetchone())
print(cursor.fetchone()) # 读取数据类似于文件光标的移动
cursor.scroll(1,'relative') # 相对于光标所在的位置继续往后移动1位
# cursor.scroll(1, 'absolute') # 相对于数据的开头往后继续移动1位
print(cursor.fetchall())

结合数据库完成一个用户的登录功能?

import pymysql

conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='day48',
charset='utf8' # 编码千万不要加-
) # 链接数据库
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

username = input('>>>:')
password = input('>>>:')
sql = "select * from user where username=%s and password=%s"
# sql = "select * from user where username=username and password=password"(错误演示)
# 不要手动拼接数据 先用%s占位 之后将需要拼接的数据直接交给execute方法即可
print(sql)
rows = cursor.execute(sql, (username, password)) # 自动识别sql里面的%s用后面元组里面的数据替换
# rows = cursor.execute(sql) (错误演示)
if rows:
print('登录成功')
print(cursor.fetchall())
else:
print('用户名密码错误')

ps:

利用一些语法的特性 书写一些特点的语句实现固定的语法
MySQL利用的是MySQL的注释语法
select * from user where name='jason' -- jhsadklsajdkla' and password=''

select * from user where name='xxx' or 1=1 -- sakjdkljakldjasl' and password=''

日常生活中很多软件在注册的时候都不能含有特殊符号
因为怕你构造出特定的语句入侵数据库 不安全

敏感的数据不要自己做拼接 交给execute帮你拼接即可

posted @ 2020-05-07 22:55  臭弟弟d  阅读(172)  评论(0编辑  收藏  举报