pymysql模块

pymysql模块

下载PyMySQL的两种方式:
第一种:python

 

第二种:mysql

PyMySQL的用法:

import pymysql

conn = pymysql.Connect(   #实例化出一个conn对象
    user='root',  # sql登陆的用户名
    password='admin', # sql登陆的用密码
    port=3306,    # MySQL的端口号
    host='127.0.0.1', # 本地地址
    charset='utf8',   # 字符编码
    database='q1',      # 数据库名
)
# cursor获取游标对象 底层封装的是 recv send   pymysql.cursors.DictCursor 指定返回的结果为字典类型
cursor = conn.cursor(pymysql.cursors.DictCursor)
# sql 语句
user = input('请输入姓名:').strip()
ps = input('请输入密码:').strip()
sql = "select * form userinfo where user = '%s' and password = '%s'"%(user,ps)

res = cursor.execute(sql) # 执行slq 语句
print(res)
if res:
    print('插入成功')
else:
    print('插入失败')
conn.commit()  # pymysql 模块默认提供事物  若是没有提交等于代码没有执行  表与表之间事物能够撤销 表之间须要提交 可是库是不行的 若是执行库的操做会删除库
conn.commit() # 指的是操做表的记录(数据)不会提交 须要conn.commit()来提交 而 删除表 删除库则会真实的删除
conn.rollback() # 发生错误 撤回操做
cursor.close()
conn.close()

注意:在写插入的语句的时候须要用 commit()来提交执行的SQL语句

SLQ注入的问题:

以上代码存在SQL注入的问题sql

因为上面代码时经过本身%s拼接的 因此当用户输入到用户名的时候 好比 用户输入 zk’  or 1=1 这样的话也是能够登陆成功的  或者用户输入 zk’ --dadawd数据库

在MySQL中 -- 或者 # 都是注释的意思,因此在拼接的时候用户能够找到这个漏洞来直接登陆。编码

解决(交给MySQL本身去拼接):spa

# Author:ZhaoKang

import pymysql

conn = pymysql.Connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='admin',
    database='day41',
    charset='utf8',
    autocommit=True
)

cursor = conn.cursor(pymysql.cursors.DictCursor)

user = input('请输入姓名:').strip()
ps = input('请输入密码:').strip()
sql = "select * from userinfo where user = %s and password = %s"

res = cursor.execute(sql,(user, ps))
print(res)
if res:
    print('登陆成功')
else:
    print('登陆失败')

注意:

pymysql 模块默认提供事物  若是没有提交等于代码没有执行  表与表之间事物能够撤销 表之间须要提交 可是库是不行的 若是执行库的操做会删除库
相关文章
相关标签/搜索