一、环境(安装略)
mysql数据库、navicat12(也可以是其他版本)数据库管理工具
python3.X、pycharm开发环境
pymysql包:用于链接数据库
二、使用python执行sql语句
import pymysql
# 连接数据库
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306)
# 创建数据库的游标对象
cursor = db.cursor()
# execute()方法并执行 SQL 语句
cursor.execute("select version()")
1、导入库:pymysql
2、连接数据库pymysql的connect()方法:链接数据库,返回一个数据库对象
数据库对象名 = pymysql.connect(host='主机名(ip地址)', user='用户名', password='密码', port=接口(默认3306)) 如下图
3、数据库对象的cursor()方法:创建一个游标对象(检索数据的指针)。
游标是什么?简而言之游标是python程序与数据库的中间产物,负责对数据库进行sql操作,并存储操作结果。
4、游标对象的execute()方法:输入一个字符串,执行字符串所代表的sql语句。
三、数据库的增删改查
1、commit()方法与rollback()方法:
这两种方法都是数据库对象的方法
db.commit() 提交事务方法:只有提交事务,当前一次打开连接时对数据库的更改才能被实现。在增删改三类操作中,如果没有这个方法就无法实现对数据库的更改。
db.rollback() 回滚事务方法:将本次所有操作进行清空。
execute()方法进行的所有操作并没有直接作用于数据库,而是被“缓存”了起来。commit()方法是将缓存的操作保存,而rollback()方法则是将缓存的操作全部清空。直接关闭db.close()也会将本次所有缓存的操作清空。
类比使用word等办公文档的体验,可能更容易理解这个。如下:
import pymysql
# 连接到MySQL数据库
db = pymysql.connect("localhost", "root", "password", "database_name")
# 创建一个游标对象
cursor = db.cursor()
# 假设我们执行一个SQL命令,但由于某种原因,我们想要撤销更改
try:
# 执行一个SQL命令,例如插入数据
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", (value1, value2))
# 提交更改到数据库
db.commit()
except Exception as e:
# 发生错误时回滚事务
db.rollback()
print(f"Error occurred: {e}")
# 关闭游标和连接
cursor.close()
db.close()
2、数据库的增删改
数据的增删改都可以通过游标方法cursor.execute()实现
cursor.execute("sql语句")
db.commit()
1、可以直接将sql语句写入括号和双引号内。
2、也可以通过以下形式输入提前写好的sql语句
字符串1 = “sql语句”
cursor.execute(字符串1)
3、也可以使用类似于C语言中的printf函数的方式(同样的也可以采用预编辑的字符串语句):
字符串2 = “sql操作语句2”
cursor.execute(“sql操作语句1+%s”, 字符串2)
字符串1 = “sql操作语句1+%s”
字符串2 = “sql操作语句2”
cursor.execute(字符串1, 字符串2)
3、数据库的查
增删改涉及对数据库数据的修改,查涉及数据库多条数据的读取。
1、“查”操作
cursor.execute("sql语句")
游标对象cursor可以对数据库进行查询并将查询结果进行存储进一个队列中。
2、cursor.fetchone()
该查询队列可以用cursor.fetchone() 方法依次读取。
cursor.fetchone()
方法是游标对象的一个方法,用于从当前数据库查询中获取下一行作为单独的元组。当你执行一个查询后,可以使用cursor.fetchone()
方法来逐行地从查询结果中检索数据。
如下:
# 执行SQL查询
cursor.execute("SELECT * FROM table_name")
# 获取查询结果的第一行
row = cursor.fetchone()
# 继续获取查询结果的其他行
while row:
print(row)
row = cursor.fetchone()
db.close()