关于连接数据库一般有两种方式:
# 第一种方法
pip install mysql-connector-python
# 第二种方法(一般使用这个)
pip install PyMySQL
一.连接数据库
1.下载安装库
pip install pymysql
2.导入库
import pymysql
3.连接数据库
注:内容是你自己的账号和密码
db = pymysql.connect(
host='localhost', # 主机名
user='root', # 用户名
password='1234', # 密码,
database='manage', # 数据库名称,
)
一般数据库的连接建议使用异常处理
像这样:
# 异常处理
try:
# 连接数据库
db = pymysql.connect(
host='localhost', # 主机名
user='root', # 用户名
password='1234', # 密码,
database='manage', # 数据库名称,
)
print('数据库连接成功!')
except pymysql.Error as e:
print('数据库连接失败' + str(e))
二.使用数据库
1.声明一个游标
cur = db.cursor()
为什么要使用游标:通过使用游标,可以在执行SQL语句后,将结果存储在一个临时的位置。是为了实现对查询结果的逐行处理和控制,以及方便后续的数据操作和管理。
2.常用数据库的基础方法
方法 | 说明 | 语法 |
close | 关闭游标 | cur.close() |
execute | 执行SQL语句 | cur.execute(sql) |
fetchall | 获取执行结果的全部记录 | cur.fetchall() |
一般来说,基本有这些方法就够了。
3.sql语句
如果需要加入变量(增删改等操作)
可以使用格式化等(会有很多种语句),举个栗子:
sql_add = "insert into stu(id,name,gender,age,class) values (%s,%s,%s,%s,%s)"
如果需要加入变量(主查询)
sql_user = "select * from user"
4.如何使用sql语句
操作(增删改):
sql_add = "insert into stu(id,name,gender,age,class) values (%s,%s,%s,%s,%s)"
values = (1,'小明','男',18,'计算机一班')
try:
cur.execute(sql_add,value)
# 提交事务
db.commit()
print('数据插入成功!')
except pymysql.Error as e:
print("数据插入失败:"+e )
# 回滚事务
db.rollback()
关于为什么要commit提交事务,下面再说
查询:
一.基础使用方式
sql_user = "select * from user"
try:
cur.execute(sql_user)
# 使用fetchall()方法接收全部的返回结果行
# 返回的results是元组
results = cur.fetchall()
except pymysql.Error as e:
print("数据查询失败:" + str(e))
二. 新方式
# 把数据用列表嵌套的方式等(自定义)
try:
cur.execute(sql_user)
# 使用fetchall()方法接收全部的返回结果行
results = cur.fetchall()
# results值为(('1', '1'), ('2', '2'))
# 空列表储存数据(外)
user_all = []
for row in results:
user_name = row[0]
password = row[1]
# 内部
user_list = [user_name, password]
# 列表嵌套列表
user_all.append(user_list)
except pymysql.Error as e:
print("数据查询失败:" + str(e))
- 关于为什么不使用execute查询,
因为execute只是用于执行代码,执行sql语句的,就像如果把cur.execute(sql_user)打印出来,打印出的只是他执行所影响的行数.
而对于fetchall来说,返回的是一个执行后出来的结果,把结果作为元组给返回过来
5.关于commit
查询不需要commit,增删改需要commit,提交事务,操作真正会影响到数据库中,否则数据库里的内容不变.
python中默认的是autocommit = False
注意:
虽然python的pymysql默认不是自动提交事物
但是MySQL是自动提交事务的(即:autocommit=1)
6.关闭游标与数据库
原因
-
释放资源:关闭游标和数据库可以释放与它们相关的系统资源,如内存、文件句柄等。如果不关闭这些资源,可能会导致资源泄漏,影响系统性能。
-
避免连接泄露:长时间保持数据库连接和游标打开可能导致连接泄露,即连接没有被正确关闭,导致数据库服务器上的连接数过多,影响其他用户的访问。
怎么做
# 关闭游标
cur.close()
# 关闭数据库连接
db.close()
持续更新中。。。