PyMySQL
用于连接MySQL
服务器的一个库(py2
中使用mysqldb
)
1、安装PyMySQL
pip install pymysql
2、连接数据库
- 导入pymysql
import pymysql
- 连接数据库
前提:数据库服务端已启动
# 打开数据库连接
db = pymysql.connect(
user=None, # 用户名
password="", # 密码
host=None, # 服务端地址
database=None, # 数据库
port=0, # 服务端口号
charset="utf8", # 设置数据库编码
cursorclass=Cursor, # 自定义游标对象
autocommit=False # 是否直接提交数据,默认否
)
# 创建游标对象
cursor = db.cursor()
# 关闭数据库连接
db.close()
connect()参数:
-
user
: 数据库登陆名,默认是当前用户 -
password
:数据库登录密码,默认为空 -
host
:数据库主机,默认是用本地本机 -
database
:要使用的数据库名,无默认值;
注意:以免项目中涉及多数据库,该值一般放置在sql语句中,而非连接数据库时设置 -
port
:MySQL服务使用TCP端口。默认是3306 -
charset
:数据库编码。常用编码方式utf8
-
cursorclass
:自定义游标对象。设置pymysql.cursors.DictCursor
或者创建cursor对象
时,传参cursor = db.cursor(pymysql.cursors.DictCursor)
设置为字典形式返回数据(默认元组)。
3、执行sql语句
# SQL语句
sql = """CREATE TABLE stu(
sid INT NOT NULL AUTO_INCREMENT,
name CHAR(20) NOT NULL,
pwd CHAR(20),
PRIMARY KEY(id)
);"""
# 执行SQL语句
cursor.execute(sql)
4、数据提交或错误回滚
连接对象db,提供了对事务
操作的支持
-
commit()
提交数据(游标的所有更新操作) -
rollback()
发生错误后回滚(当前游标的所有操作)
sql2 = "INSERT INTO stu(sid,name) VALUES(1, '百草');" # 插入数据
sql3 = "UPDATE stu SET name = 'wlh' WHERE id = 1;" # 修改数据
sql4 = "DELETE FROM stu WHERE name = 'wlh';" # 删除数据
try:
cursor.execute(sql2) # 执行语句
db.commit() # 执行无误后,提交;才会真正修改到数据库
except Exception as e:
print(f"数据操作{sql}失败:{e}")
db.rollback() # 发生错误回滚
或者数据库连接时,修改autocommit = True
,则无需db.commit()
5、查询数据
-
fetchone()
:获取单条数据(获取下一个结果集。结果是一个对象) -
fetchall()
:获取多条数据 -
rowcount
:只读属性。返回执行execute()
方法后影响的行数
# -----------start:查询数据-----------------
sql5 = "SELECT * FROM stu;" # 查询数据
cursor.execute(sql5) # 执行SQL
# 获取数据
data1 = cursor.fetchone() # 获取单条数据
print(data1) # 返回数据类型是字典;{'ID': 2, 'NAME': 'LinWoW'}
# 返回数据类型是元组;(2, ‘LinWoW’)
data2 = cursor.fetchall() # 获取所有数据
print(data2) # [{'ID': 2, 'NAME': 'LinWoW'},{'ID': 3, 'NAME': 'wlh'}]
# -----------end:查询数据-------------------
-
scroll()
类似文件操作中的seek()
,第一个参数表示偏移量,第二个参数表示偏移的起始位置
# 绝对移动,参照开始的位置
cursor.scroll(1,'absolute')
# 相对移动,参照当前光标的位置
cursor.scroll(1,'relative')
5.1 查询优化?
避免SQL注入,前往不要手动拼接(关键参数)查询条件
username = input('username>>>:')
password = input('password>>>:')
sql = "select * from stu where name=%s and password=%s"
res = cursor.execute(sql,(username,password)) 利用方法实现字符的自动拼接
if res:
print('输入正确!')
else:
print('用户名或密码错误!')
cone.close()
'''
username>>>:LinWoW
password>>>:mysql
输入正确!
username>>>:"qwwqw" or 1=1 --
password>>>:
用户名或密码错误!
'''
网友评论