什么是pymysql模块
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
使用pymysql模块
下载第三方模块: pip3 install pymysql
import pymysql
# 1.连接并打开Mysql数据库
conn = pymysql.connect(
host='127.0.0.1', #主机地址,若是自己的主机也可以用'localhost'
port=3306, #端口
user='root', #用户
password='123456', #密码
database='db4', #数据库
charset='utf8', # 设置编码,此处不能写utf-8
autocommit=True # 自动提交
)
# 2.创建游标,获取游标对象 ----> 游标 可以用来提交sql命令
#pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
cursor_obj = conn.cursor(pymysql.cursors.DictCursor)
# 3.通过execute()方法可以执行sql语句
# 查数据
cursor_obj.execute('select * from t1')
# 查到数据后通过cursor_obj对象.fetchall() 获取所以查询到的结果
one = cursor_obj.fetchone() #获取结果的第一条数据 fetchone()
print(one)
for i in cursor_obj.fetchmany(3): #获取剩余结果的前n条数据 #fetchmany()
print(i)
all = cursor_obj.fetchall() # 获取剩余结果的所有数据
for j in all :
print(j)
#相对移动
cursor_obj.scroll(2,
'relative') #基于指针所在的位置向后偏移2个
#绝对移动
cursor_obj.scroll(2,
'absolute') #基于起始位置向后偏移2个
# 一、创建表
#若表存在则删除
cursor_obj.execute('drop table if exists user')
#创建表
sql = 'create table t1(id int,auto_increment,name varchar(20))'
# 5.使用 execute() 方法执行创建数据库语句
cursor_obj.execute(sql)
# 二、SQL 插入语句
try:
sql = 'insert into user(id, name) values(1, "baohan")'
#执行 sql 语句
cursor_obj.execute(sql)
#提交到数据库执行,不然无法保存新建或者修改的数据
cursor_obj.commit()
except Exception as e:
print(e)
# 三、更新数据
try:
sql = 'update user set name="baohan_666" where id=1'
cursor_obj.execute(sql)
except:
# 如果发生错误则回滚
conn.rollback()
#对数据进行查找
print(cursor_obj.execute('select * from user'))
print(cursor_obj.fetchall())
# 四、删除数据
sql = 'delete from user'
cursor_obj.execute(sql)
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor_obj.close()
# 关闭连接
conn.close()
SQL的注入问题
sql注入问题:利用特殊符号和注释语法 巧妙地绕过真正的sql校验
关键性的数据 不要自己手动去拼接 而是交由execute帮你去做拼接
import pymysql
conn = pymysql.connect(
host = 'localhost',
user = 'root',
passwd = '123',
charset = 'utf8',
db = 'day36',
autocommit = True
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
#获取用户输入的用户名和密码 然后去数据库中校验
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# sql = "select * from user_info where name='%s' and password= '%s'"%(username,password) #错误写法,会产生SQL注入问题
sql = "select * from user_info where username=%s and password=%s"
cursor.execute(sql,(username,password))
res = cursor.fetchall()
if res:
print(res)
else:
print('用户名或密码错误')