Python pymysql模块

pymysql模块

1.什么是pymysql:PyMySQL 是在 Python3.x 版本中用于链接 MySQL 服务器的一个库,Python2中则使用mysqldb。mysql

2.pymysql模块是第三方的须要本身安装:sql

# 1.安装:pip3 insatll pymysql
安装pynysql库

3.基本语法使用数据库

# 导入pymysql模块
import pymysql # 链接到数据库
conn = pymysql.connect( host = '127.0.0.1', # 数据库ip地址
    port = 3306, # 数据库端口号
    user = 'root', # 用户名
    password = '123', # 密码
    database = 'day38', # 数据库
    charset = 'utf8',  # 编码千万不要加- 若是写成了utf-8会直接报错
    autocommit = True  # 这个参数配置完成后 增删改操做都不须要在手动加conn.commit()了
) # 产生游标对象
cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生一个游标对象 每行数据 以字典的形式或列表套元组展示 键是表的字段名 值是表的字段值,不设置查询结果解释元组或元组套元组

# sql语句拼接
sql = sql语句  # 例:# sql = 'insert into user(name,password) values("jerry","666")'

# 执行sql语句,sql注入和sql语句拼接后续再讲
res = cursor.execute(sql) #  # cursor.excutemany(sql,[(),(),()] # 一次插入多行记录

# 获取结果 # res = cursor.fetchone() # 获取一条数据 # res = cursor.fetchmany(10) # 获取10条数据,参数可修改
res = cursor.fetchall()  # 获取全部结果 游标设置的话是列表里面套字典

# 关闭
cursor.close() # 关闭游标
conn.close() # 关闭链接

# 补充:
cursor.scroll(2,'absolute')  # 控制光标移动 absolute相对于其实位置 日后移动几位,参数可修改
cursor.scroll(1,'relative')  # relative相对于当前位置 日后移动几位,参数可修改
pymysql基本语句

4.sql注入服务器

1.什么是sql注入:太过于相信用户输入的信息,用户利用注释等具备特殊意义的符号 来完成有漏洞的sql语句。ide

2.解决办法:后续写sql语句 不要手动拼接关键性的数据,而是让excute帮你去作拼接fetch

3.案例:编码

conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = '123', database = 'day38', charset = 'utf8',  # 编码千万不要加- 若是写成了utf-8会直接报错
    autocommit = True  # 这个参数配置完成后 增删改操做都不须要在手动加conn.commit()了
) cursor = conn.cursor(pymysql.cursors.DictCursor)  # 产生一个游标对象 以字典的形式返回查询出来的数据 键是表的字段 值是表的字段对应的信息
 username = input('username>>>:') password = input('password>>>:') # 注入问题
''' sql = "select * from user where name =%s and password = %s" % (username,password) cursor.execute(sql) '''
# 解决方法
sql = "select * from user where name =%s and password = %s" res = cursor.execute(sql,(username,password))  # 可以帮你自动过滤特殊符号 避免sql注入的问题,execute 可以自动识别sql语句中的%s 帮你作替换,res是结果的数量整型

 if res: print(cursor.fetchall()) else: print('用户名或密码错误')
sql注入
#
sql = "insert into user(username,password) values(%s,%s)" rows = cursor.excute(sql,('jason','123')) # 修改
sql = "update user set username='jasonDSB' where id=1" rows = cursor.excute(sql) """ 增和改单单执行excute并不会真正影响到数据,须要再执行conn.commit()才能够完成真正的增改 """

# 一次插入多行记录
res = cursor,excutemany(sql,[(),(),()]
View Code
相关文章
相关标签/搜索