pymysql模块

pymysql模块

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

 

第二种:

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注入的问题

由于上面代码时通过自己%s拼接的 所以当用户输入到用户名的时候 比如 用户输入 zk’  or 1=1 这样的话也是可以登录成功的  或者用户输入 zk’ --dadawd

在MySQL中 -- 或者 # 都是注释的意思,所以在拼接的时候用户可以找到这个漏洞来直接登录。

解决(交给MySQL自己去拼接):

# 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 模块默认提供事物  如果没有提交等于代码没有执行  表与表之间事物可以撤销 表之间需要提交 但是库是不行的 如果执行库的操作会删除库

posted @ 2019-05-16 19:07  zack赵康  阅读(219)  评论(0)    收藏  举报