Python pymysql模块

时间:2021-12-13 03:55:32

什么是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('用户名或密码错误')