python连接数据库模块pymsql及防止sql注入

pymysql模块

#安装
pip install pymysql

import pymysql

#打开数据库连接
conn= pymysql.connect(host='localhost',user='root',password='123.com',database='crm')

# 使用cursor()方法获取操作游标
cursor = conn.cursor()

#创建表
sql0 = 'create table ta(id int,name char(20),sex enum("man","female"));'
cursor.execute(sql0)

#增加
sql1 = 'insert into ta values(1,"aaa","man");'
try:
    cursor.execute(sql1)
    conn.commit()       # 提交到数据库执行
except:
    conn.rollback()     # 如果发生错误则回滚

#
sql3 = 'update ta set id=10 where id=1'
try:
    cursor.execute(sql3)
    conn.commit()
except:
    conn.rollback()
#删除
sql2 = 'delete from ta where id=10'
try:
    cursor.execute(sql2)
    conn.commit()
except:
    conn.rollback()

# 关闭数据库连接
conn.close()


fetchone(): 该方法获取下一个查询结果集,结果集是一个对象
fetchall(): 接收全部的返回结果行
fetchmany(): 接收指定的条数
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数

import pymysql

#打开数据库连接
conn= pymysql.connect(host='localhost',user='root',password='123.com',database='crm')

# 使用cursor()方法获取操作游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = 'select * from ta'

cursor.execute(sql)
ret = cursor.fetchall()
print(ret)


# ret2 = cursor.fetchone()
# print(ret2)
# ret3 = cursor.fetchone()
# print(ret3)

# ret = cursor.fetchmany(2)
# print(ret)

conn.close()

事务和锁

begin;  # 开启事务,添加行锁
sql语句........
commit; # 提交事务

execute()之sql注入
利用数据库实现用户名密码的认证操作

import pymysql
conn= pymysql.connect(
    host='localhost',
    user='root',
    password='123.com',
    database='mysql'
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
uname = input('请输入用户名:')
pword = input('请输入密码:')

#拿输入的用户名和密码来匹配数据库中user表里的User字段的用户名和Password字段的密码
sql = "select * from user where User='%s' and Password='%s';"%(uname,pword)

res = cursor.execute(sql)

#如果匹配就打印0,如果不匹配就打印1
print(res)


#1、sql注入之:用户存在,绕过密码
root' -- 任意字符

#2、sql注入之:用户不存在,绕过用户与密码
xxx' or 1=1 -- 任意字符


解决sql注入办法
import pymysql
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='123.com',
    database='mysql',
    charset='utf8'
)

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

uname = input('请输入用户名:')
pword = input('请输入密码:')

sql = "select * from user where User=%s and Password=%s;"
res=cursor.execute(sql,[uname,pword])

print(res)
if res:
    print('登陆成功')
else:
    print('用户名和密码错误!')

 

posted @ 2019-03-11 21:47  LinuxCBB  阅读(510)  评论(0)    收藏  举报