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('用户名和密码错误!')

浙公网安备 33010602011771号