Python——MySQL数据库编程
MySQL 是现在最流行的关系型数据库管理系统,在 WEB 开发中,MySQL 是最好的 RDBMS 应用软件之一。接下来,让我们快速掌握
python 使用 MySQL 的相关知识,并轻松使用 MySQL 数据库。
第1关:python数据库编程之创建数据库
Python 如何使用 MySQL?
python 最为强大的一点就是社区的庞大,有着各种方便使用的开源库,使 python 在短短时间内就拥有了大量的用户,并且由于使用库及其简单,可以将其他语言中需要大量代码才能完成的操作浓缩于短短几行代码中。我们这里给出几种用与连接 MySQL 的库:
MySQL-python
mysqlclient
PyMySQL
peewee
SQLAlchemy
可以在命令行中使用pip install (库名)来安装相应的第三方库。
接下来,我们将使用pymysql连接数据库
先安装第三方库
总览过程:
查看现有的数据库
创建test_3_21数据库
import pymysql
# 连接mysql,创建连接并返回连接对象
def connect():
conn = pymysql.connect(
host='localhost', # MySQL服务器的IP地址
port=3306, # MySQL服务器的端口号
user='root', # 用于登录MySQL的用户名
charset='utf8mb4', # 设置字符集为utf8mb4,支持存储更多字符集,包括emoji等
passwd='123456' # 用于登录MySQL的密码
)
return conn
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 创建数据库 if not exists,避免重复创建
cursor.execute("create database if not exists test_3_21 character set utf8 collate utf8_general_ci")
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
# 执行函数
if __name__ == "__main__":
test()
可以发现,通过python代码就可以创建数据库了。
那么分析一下代码:
第一步
导入第三方库
第二步建立与数据库的连接
第三步创建游标
游标(cursor)是数据库操作的工具,目的是用来执行 SQL 查询和获取查询结果。简而言之,游标是用来“控制”SQL语句执行的对象。
在 MySQL 中,游标负责将 SQL 语句发送到数据库,并负责处理从数据库返回的结果。
每次执行 cursor.execute() 都会发送 SQL 语句到 MySQL 服务器,游标帮助我们处理这些语句并获取执行结果。
第四步操作数据库
注意:在数据库中有字符集,以及排序规则两个设置
字符集:定义了字符以及字符的编码。
在数据库中默认编码的不同可能导致数据乱码的现象,推荐设置字符集为utf8
创建数据库时在尾部追加default cha\fracter set utf8即可设置
排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点:
1、两个不同的字符集不能有相同的排序规则
2、两个字符集有一个默认的排序规则
3、有一些常用的命名规则。如_ci结尾表示大小写不敏感(caseinsensitive),_cs表示大小写敏感(case sensitive),_bin表示二进制的比较(binary).
创建数据库时在尾部追加collate utf8_general_ci即可完成排序规则的设置
第五步结束关闭
第2关:python数据库编程之创建数据表
前面已经知道了怎么连接mysql,创建数据库了,那么我们怎么在一个数据库中创建表呢
总览过程:
先看一下是否有表
执行代码
import pymysql
# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
conn = pymysql.connect(
host='127.0.0.1', # MySQL服务器的IP地址
port=3306, # MySQL服务器的端口号
user='root', # 用于登录MySQL的用户名
passwd='123456', # 用于登录MySQL的密码
db='test_3_21', # 指定要连接的数据库名称
charset='utf8mb4' # 设置字符集为utf8mb4
)
return conn
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 创建表格 students,字段包含 id, name, age
cursor.execute("""
CREATE TABLE IF NOT EXISTS students (
id INT AUTO_INCREMENT PRIMARY KEY, # id为自增主键
name VARCHAR(100) NOT NULL, # 姓名不能为空
age INT NOT NULL # 年龄不能为空
)
""")
# 提交事务(如果没有commit,表的创建不会生效)
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
# 执行函数
if __name__ == "__main__":
test()
查看结果
第3关:python数据库编程之插入数据
给刚刚创建的student表插入一条数据
过程总览
先看一下表数据
运行代码
import pymysql
# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
conn = pymysql.connect(
host='127.0.0.1', # MySQL服务器的IP地址
port=3306, # MySQL服务器的端口号
user='root', # 用于登录MySQL的用户名
passwd='123456', # 用于登录MySQL的密码
db='test_3_21', # 指定要连接的数据库名称
charset='utf8mb4' # 设置字符集为utf8mb4
)
return conn
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 插入一条数据
cursor.execute("""
INSERT INTO students (name, age)
VALUES (%s, %s)
""", ("John Doe", 25)) # 插入一名名为 John Doe,年龄为 25 的学生
# 提交事务,确保插入数据生效
conn.commit()
# 输出插入的结果
print("Inserted a new student into the 'students' table.")
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
# 执行函数
if __name__ == "__main__":
test()
运行结果
因为我们设置了表是自增的,所以默认从1开始
第4关:python数据库编程之查询数据
使用python代码查看刚刚的数据
代码
import pymysql
# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
conn = pymysql.connect(
host='localhost', # MySQL服务器的IP地址
port=3306, # MySQL服务器的端口号
user='root', # 用于登录MySQL的用户名
passwd='123456', # 用于登录MySQL的密码
db='test_3_21', # 指定要连接的数据库名称
charset='utf8mb4' # 设置字符集为utf8mb4
)
return conn
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 查询 students 表中的所有数据
cursor.execute("SELECT * FROM students")
# 获取查询结果
results = cursor.fetchall()
# 显示表中的数据
print("\nStudents table contents:")
print("ID | Name | Age")
print("-" * 30)
for row in results:
print(f"{row[0]} | {row[1]:<10} | {row[2]}")
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
# 执行函数
if __name__ == "__main__":
test()
运行结果
第5关:python数据库编程之修改数据
把刚刚插入的数据名字改成张三
代码
import pymysql
# 连接mysql,连接数据库test_3_21,创建连接并返回连接对象
def connect():
conn = pymysql.connect(
host='localhost', # MySQL服务器的IP地址
port=3306, # MySQL服务器的端口号
user='root', # 用于登录MySQL的用户名
passwd='123456', # 用于登录MySQL的密码
db='test_3_21', # 指定要连接的数据库名称
charset='utf8mb4' # 设置字符集为utf8mb4
)
return conn
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 修改 students 表中的数据,将 id = 1 的记录的名字改为 "张三"
cursor.execute("""
UPDATE students
SET name = %s
WHERE id = %s
""", ("张三", 1))
# 提交事务,确保修改生效
conn.commit()
print("Updated the name to '张三' for student with id = 1.")
# 查询 students 表中的所有数据以验证修改
cursor.execute("SELECT * FROM students")
# 获取查询结果
results = cursor.fetchall()
# 显示表中的数据
print("\nStudents table contents after update:")
print("ID | Name | Age")
print("-" * 30)
for row in results:
print(f"{row[0]} | {row[1]:<10} | {row[2]}")
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
# 执行函数
if __name__ == "__main__":
test()
结果
第6关:python数据库编程之删除数据
删除记录是张三的记录
代码
import pymysql
# 连接mysql,连接数据库test_3_21,创建连接并返回连接对象
def connect():
conn = pymysql.connect(
host='127.0.0.1', # MySQL服务器的IP地址
port=3306, # MySQL服务器的端口号
user='root', # 用于登录MySQL的用户名
passwd='123456', # 用于登录MySQL的密码
db='test_3_21', # 指定要连接的数据库名称
charset='utf8mb4' # 设置字符集为utf8mb4
)
return conn
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 删除 students 表中名字为 "张三" 的数据
cursor.execute("""
DELETE FROM students
WHERE name = %s
""", ("张三",))
# 提交事务,确保删除生效
conn.commit()
print("Deleted student(s) with name '张三' from the 'students' table.")
# 查询 students 表中的所有数据以验证删除
cursor.execute("SELECT * FROM students")
# 获取查询结果
results = cursor.fetchall()
# 显示表中的数据
print("\nStudents table contents after deletion:")
print("ID | Name | Age")
print("-" * 30)
if results:
for row in results:
print(f"{row[0]} | {row[1]:<10} | {row[2]}")
else:
print("The table is empty.")
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
# 执行函数
if __name__ == "__main__":
test()
结果