前言
回顾之前讲了python语法编程 ,必修入门基础和网络编程,多线程/多进程/协程等方面的内容,今天到了数据库编程篇,前面没看的也不用往前翻,系列文已经整理好了:
1.跟我一起从零开始学python(一)编程语法必修
2.跟我一起从零开始学python(二)网络编程
3.跟我一起从零开始学python(三)多线程/多进程/协程
本篇讲:python数据库编程:MySQL数据库
本系列文根据以下学习路线展开讲述,由于内容较多,:
从零开始学python到高级进阶路线图
关注公众号:python技术训练营,学习进阶一步到位
适用于零基础学习和进阶人群的python资源:
① 腾讯认证python完整项目实战教程笔记PDF
② 十几个大厂python面试专题PDF
③ python全套视频教程(零基础-高级进阶JS逆向)
④ 百个项目实战+源码+笔记
⑤ 编程语法-机器学习-全栈开发-数据分析-爬虫-APP逆向等全套项目+文档
⑥ 交流学习
⑦ 想要兼职接单
下章讲:Redis数据库
一丶MySQL数据库
MySQL数据库
一丶MySQL基础
MySQL是一种关系型数据库管理系统,是目前最流行的开源数据库之一。Python可以通过MySQLdb、PyMySQL等模块来连接和操作MySQL数据库。
以下是Python连接MySQL数据库的基本步骤:
安装MySQLdb或PyMySQL模块
pip install MySQLdb
或
pip install PyMySQL
导入模块
import MySQLdb
或
import pymysql
连接数据库
# MySQLdb模块
conn = MySQLdb.connect(host='localhost', user='root', password='password', database='test', port=3306)
# PyMySQL模块
conn = pymysql.connect(host='localhost', user='root', password='password', database='test', port=3306)
创建游标对象
cursor = conn.cursor()
执行SQL语句
cursor.execute('SELECT * FROM table_name')
获取查询结果
result = cursor.fetchall()
关闭游标和连接
cursor.close()
conn.close()
以上是Python连接MySQL数据库的基本步骤,具体操作可以根据实际需求进行调整。
2.在MySQL数据库中,常见的数据类型包括:
-
数值类型:包括整型、浮点型、双精度型等。
-
字符串类型:包括定长字符串、变长字符串、文本类型等。
-
日期和时间类型:包括日期、时间、日期时间等。
-
布尔类型:包括真和假两种值。
-
二进制类型:包括二进制数据、图像、音频等。
-
枚举类型:包括一组预定义的值。
-
集合类型:包括一组预定义的值,但可以选择多个。
在Python中,可以使用MySQLdb或pymysql等库来连接MySQL数据库,并使用SQL语句来创建、修改、查询和删除数据表。在创建数据表时,需要指定每个字段的数据类型,以确保数据的正确性和完整性。
3.在MySQL数据库中,约束是用于限制表中数据的规则。以下是MySQL中常用的约束:
-
NOT NULL约束:该约束用于确保列中的值不为空。
-
UNIQUE约束:该约束用于确保列中的值是唯一的。
-
PRIMARY KEY约束:该约束用于将列设置为主键,确保每行数据都有唯一的标识符。
-
FOREIGN KEY约束:该约束用于确保列中的值与另一个表中的值匹配,通常用于建立表之间的关系。
-
CHECK约束:该约束用于确保列中的值符合指定的条件。
-
DEFAULT约束:该约束用于在插入新行时为列提供默认值。
例如,以下是一个包含约束的MySQL表的示例:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 18),
email VARCHAR(50) UNIQUE,
major_id INT,
FOREIGN KEY (major_id) REFERENCES majors(id)
);
在上面的示例中,id列被设置为主键,确保每行数据都有唯一的标识符。name列被设置为NOT NULL,确保该列中的值不为空。age列被设置为CHECK约束,确保该列中的值大于或等于18。email列被设置为UNIQUE约束,确保该列中的值是唯一的。major_id
列被设置为FOREIGN KEY约束,确保该列中的值与majors表中的id列匹配。
4.Python中操作MySQL数据库需要使用到MySQLdb或者pymysql等第三方库
下面介绍一些基本的数据库操作。
- 连接数据库
使用MySQLdb库连接数据库的代码如下:
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="test")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 关闭数据库连接
db.close()
使用pymysql库连接数据库的代码如下:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", passwd="password", db="test")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 关闭数据库连接
db.close()
- 创建表
使用execute()
方法执行SQL语句来创建表,例如:
# 创建表
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
- 插入数据
使用execute()
方法执行SQL语句来插入数据,例如:
# 插入数据
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
cursor.execute(sql)
- 查询数据
使用execute()
方法执行SQL语句来查询数据,例如:
# 查询数据
sql = "SELECT * FROM EMPLOYEE WHERE INCOME > %s" % (1000)
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % (fname, lname, age, sex, income))
- 更新数据
使用execute()
方法执行SQL语句来更新数据,例如:
# 更新数据
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
cursor.execute(sql)
- 删除数据
使用execute()
方法执行SQL语句来删除数据,例如:
# 删除数据
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
cursor.execute(sql)
5.在MySQL中,数据表是存储数据的基本单位
下面介绍一些常用的数据表操作。
- 创建数据表
创建数据表的语法如下:
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
.....
);
其中,table_name
是要创建的数据表的名称,column1、column2、column3等是数据表中的列名,datatype是列的数据类型。
例如,创建一个名为students的数据表,包含id、name、age三个列,数据类型分别为int、varchar(20)、int,可以使用以下语句:
CREATE TABLE students (
id int,
name varchar(20),
age int
);
- 插入数据
插入数据的语法如下:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
其中,table_name
是要插入数据的数据表的名称,column1、column2、column3等是数据表中的列名,value1、value2、value3等是要插入的数据。
例如,向students数据表中插入一条数据,id为1,name为"Tom",age为18,可以使用以下语句:
INSERT INTO students (id, name, age) VALUES (1, 'Tom', 18);
- 查询数据
查询数据的语法如下:
SELECT column1, column2, column3, ... FROM table_name WHERE condition;
其中,table_name
是要查询数据的数据表的名称,column1、column2、column3等是要查询的列名,condition是查询条件。
例如,查询students数据表中所有数据,可以使用以下语句:
SELECT * FROM students;
- 更新数据
更新数据的语法如下:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
其中,table_nam
e是要更新数据的数据表的名称,column1、column2等是要更新的列名,value1、value2等是要更新的值,condition是更新条件。
例如,将students数据表中id为1的记录的age更新为20,可以使用以下语句:
UPDATE students SET age = 20 WHERE id = 1;
- 删除数据
删除数据的语法如下:
DELETE FROM table_name WHERE condition;
其中,table_name
是要删除数据的数据表的名称,condition是删除条件。
例如,删除students数据表中id为1的记录,可以使用以下语句:
DELETE FROM students WHERE id = 1;
- 删除数据表
删除数据表的语法如下:
DROP TABLE table_name;
其中,table_name
是要删除的数据表的名称。
例如,删除students数据表,可以使用以下语句:
DROP TABLE students;
6.Python操作MySQL数据库的增删改查基础操作如下:
- 连接数据库
使用Python中的pymysql库连接MySQL数据库,示例代码如下:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 关闭数据库连接
db.close()
- 创建数据表
使用Python中的pymysql库创建MySQL数据库中的数据表,示例代码如下:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
# 执行SQL语句
cursor.execute(sql)
# 关闭数据库连接
db.close()
- 插入数据
使用Python中的pymysql库向MySQL数据库中的数据表插入数据,示例代码如下:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 关闭数据库连接
db.close()
- 查询数据
使用Python中的pymysql库从MySQL数据库中的数据表查询数据,示例代码如下:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE
WHERE INCOME > %s" % (1000)
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % (fname, lname, age, sex, income))
# 关闭数据库连接
db.close()
- 更新数据
使用Python中的pymysql库更新MySQL数据库中的数据表数据,示例代码如下:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 关闭数据库连接
db.close()
- 删除数据
使用Python中的pymysql库删除MySQL数据库中的数据表数据,示例代码如下:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 关闭数据库连接
db.close()
二丶MySQL进阶查询
1.创建数据库,数据表
- 创建数据库:
使用Python连接MySQL数据库,可以使用mysql.connector
模块,示例代码如下:
import mysql.connector
# 连接MySQL数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="123456"
)
# 创建数据库
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")
- 创建数据表:
使用Python连接MySQL数据库,可以使用mysql.connector
模块,示例代码如下:
import mysql.connector
# 连接MySQL数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="123456",
database="mydatabase"
)
# 创建数据表
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")
以上代码创建了一个名为customers
的数据表,包含两个字段name
和address
,类型均为VARCHAR(255)
2.条件查询
条件查询是指根据一定的条件筛选出符合要求的数据,常用的条件查询语句有WHERE、AND、OR、IN、BETWEEN等。
- WHERE语句
WHERE语句用于指定查询条件,语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition;
其中,condition是查询条件,可以使用比较运算符(=、、=、)、逻辑运算符(AND、OR、NOT)和通配符(%、_)等。
例如,查询年龄大于等于18岁的学生信息:
SELECT * FROM students WHERE age >= 18;
- AND语句
AND语句用于同时满足多个条件,语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND ...;
例如,查询年龄大于等于18岁且性别为女的学生信息:
SELECT * FROM students WHERE age >= 18 AND gender = '女';
- OR语句
OR语句用于满足多个条件中的任意一个,语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR ...;
例如,查询年龄大于等于18岁或性别为女的学生信息:
SELECT * FROM students WHERE age >= 18 OR gender = '女';
- IN语句
IN语句用于指定多个值,语法如下:
SELECT column1, column2, ... FROM table_name WHERE column_name IN (value1, value2, ...);
例如,查询学号为1001、1002、1003的学生信息:
SELECT * FROM students WHERE id IN (1001, 1002, 1003);
- BETWEEN语句
BETWEEN语句用于指定一个范围,语法如下:
SELECT column1, column2, ... FROM table_name WHERE column_name BETWEEN value1 AND value2;
例如,查询年龄在18岁到20岁之间的学生信息:
SELECT * FROM students WHERE age BETWEEN 18 AND 20;
以上就是条件查询的基本语法,可以根据实际需求灵活运用。
3.在MySQL中,可以使用ORDER BY子句对查询结果进行排序
ORDER BY子句可以跟一个或多个列名,用逗号分隔。默认情况下,排序是升序的,可以使用DESC关键字进行降序排序。
例如,以下语句将按照age列进行升序排序:
SELECT * FROM students ORDER BY age;
以下语句将按照age列进行降序排序:
SELECT * FROM students ORDER BY age DESC;
可以同时指定多个列进行排序,例如:
SELECT * FROM students ORDER BY grade DESC, age;
以上语句将先按照grade列进行降序排序,如果有相同的grade值,则按照age列进行升序排序。
注意,ORDER BY子句应该放在查询语句的最后面。
4.在MySQL中,分组是一种将数据按照某个字段进行分类的操作
分组可以用于统计数据、计算平均值、最大值、最小值等聚合函数的值。
下面是一个简单的例子,假设我们有一个学生表,包含学生的姓名、年龄和成绩:
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
score INT
);
INSERT INTO students (name, age, score) VALUES
('Tom', 18, 90),
('Jerry', 19, 80),
('Lucy', 18, 95),
('Lily', 20, 85),
('Bob', 19, 75);
现在我们想要按照年龄分组,统计每个年龄段的平均成绩和最高成绩,可以使用如下的SQL语句:
SELECT age, AVG(score) AS avg_score, MAX(score) AS max_score
FROM students
GROUP BY age;
执行结果如下:
+-----+-----------+----------+
| age | avg_score | max_score |
+-----+-----------+----------+
| 18 | 92.5000 | 95 |
| 19 | 77.5000 | 80 |
| 20 | 85.0000 | 85 |
+-----+-----------+----------+
可以看到,我们按照年龄分组,统计了每个年龄段的平均成绩和最高成绩。
在分组查询中,我们还可以使用HAVING子句来过滤分组后的数据。例如,我们想要找出平均成绩大于85分的年龄段,可以使用如下的SQL语句:
SELECT age, AVG(score) AS avg_score
FROM students
GROUP BY age
HAVING avg_score > 85;
执行结果如下:
+-----+-----------+
| age | avg_score |
+-----+-----------+
| 18 | 92.5000 |
| 20 | 85.0000 |
+-----+-----------+
可以看到,我们只保留了平均成绩大于85分的年龄段。
三丶MySQL高级应用
1.视图
在MySQL中,视图是一种虚拟的表,它是由一个或多个基本表的查询结果组成的。视图并不存储数据,而是根据查询语句动态生成结果集。视图可以简化复杂的查询操作,提高查询效率,同时也可以保护数据的安全性。
创建视图的语法如下:
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
其中,view_name
是视图的名称,column1, column2, ...
是要查询的列名,table_name
是要查询的表名,condition
是查询条件。
例如,我们可以创建一个名为employee_view
的视图,查询employee
表中的id
、name
和salary
列:
CREATE VIEW employee_view AS
SELECT id, name, salary
FROM employee;
查询视图的语法与查询表的语法类似:
SELECT * FROM view_name;
例如,我们可以查询employee_view
视图的结果:
SELECT * FROM employee_view;
视图也可以进行更新操作,但是需要满足一定的条件。具体来说,视图可以进行以下类型的更新操作:
- 对单表视图进行更新,即只涉及一个基本表的视图。
- 对多表视图进行更新,但是更新操作只能涉及一个基本表的某些列,且这些列必须是唯一的。
更新视图的语法如下:
UPDATE view_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
例如,我们可以更新employee_view
视图中id为1的员工的薪水:
UPDATE employee_view
SET salary = 5000
WHERE id = 1;
需要注意的是,更新视图时,实际上是更新了基本表中的数据,而不是视图本身。因此,更新视图时需要满足基本表的约束条件,否则会更新失败。
除了更新操作,视图还可以进行插入和删除操作,具体语法与表的操作类似。但是需要注意的是,插入和删除操作只能涉及一个基本表,且必须满足基本表的约束条件。
2.事务
事务是指一组操作,这些操作要么全部执行成功,要么全部不执行。在 MySQL 中,事务是通过 ACID 属性来保证数据的一致性和可靠性的。
ACID 是指:
- 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部不执行。
- 一致性(Consistency):事务执行前后,数据的完整性和约束条件不变。
- 隔离性(Isolation):事务之间是相互隔离的,一个事务的执行不会影响其他事务的执行。
- 持久性(Durability):事务一旦提交,对数据的修改就是永久性的,即使系统崩溃也不会丢失。
在 MySQL 中,使用 BEGIN、COMMIT 和 ROLLBACK 语句来控制事务的提交和回滚。
- BEGIN:开始一个事务。
- COMMIT:提交一个事务,将事务中的所有操作永久保存到数据库中。
- ROLLBACK:回滚一个事务,将事务中的所有操作撤销。
下面是一个使用事务的示例:
import mysql.connector
# 连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="123456",
database="mydatabase"
)
# 获取游标
mycursor = mydb.cursor()
# 开始事务
mycursor.execute("START TRANSACTION")
# 执行操作
try:
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)
sql = "UPDATE customers SET address = 'Park Lane 38' WHERE address = 'Highway 21'"
mycursor.execute(sql)
# 提交事务
mydb.commit()
except:
# 回滚事务
mydb.rollback()
# 关闭连接
mydb.close()
在上面的示例中,我们使用了 START TRANSACTION 开始一个事务,然后执行了两个操作:插入一条数据和更新一条数据。如果两个操作都执行成功,就使用 COMMIT 提交事务,否则就使用 ROLLBACK 回滚事务。
3.pyMySQL的使用
pyMySQL是Python中一个用于连接MySQL数据库的第三方库,它提供了一些简单易用的API,可以方便地进行数据库操作。
- 安装pyMySQL:
可以使用pip命令进行安装:
pip install pymysql
- 连接MySQL数据库:
在使用pyMySQL之前,需要先连接到MySQL数据库。连接MySQL数据库需要指定主机名、用户名、密码、数据库名等信息。可以使用以下代码进行连接:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="password", database="test")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 关闭数据库连接
db.close()
其中,host表示主机名,user表示用户名,password表示密码,database表示要连接的数据库名。
- 执行SQL语句:
连接到MySQL数据库后,可以使用cursor对象执行SQL语句。pyMySQL支持执行所有的SQL语句,包括查询、插入、更新、删除等操作。以下是一个查询操作的示例:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="password", database="test")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 执行SQL语句
sql = "SELECT * FROM students"
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
id = row[0]
name = row[1]
age = row[2]
gender = row[3]
print("id=%d,name=%s,age=%d,gender=%s" % (id, name, age, gender))
# 关闭数据库连接
db.close()
在执行SQL语句之前,需要先使用cursor()
方法获取操作游标。执行SQL语句可以使用execute()
方法,该方法接受一个SQL语句作为参数。查询操作可以使用fetchall()
方法获取所有记录列表,然后遍历每一条记录。
插入、更新、删除操作也可以使用execute()
方法,只需要将对应的SQL语句作为参数传入即可。
以上是pyMySQL的基本使用方法,更多详细的API可以参考官方文档。
四丶MySQL ORM框架-SQLAIchemy
SQLAlchemy是一个Python SQL工具包和ORM框架,它提供了一组广泛的工具,使得在Python中使用SQL更加容易和灵活。SQLAlchemy的主要目标是为SQL数据库提供高效、高性能的访问,并支持多种关系型数据库,如MySQL、PostgreSQL、Oracle、Microsoft SQL Server等。
SQLAlchemy的ORM框架提供了一种将Python对象映射到关系型数据库表的方法,使得开发人员可以使用Python语言来操作数据库,而不必直接使用SQL语言。ORM框架可以自动创建数据库表、插入数据、更新数据、删除数据等操作,同时还支持事务、连接池、缓存等高级功能。
下面是一个使用SQLAlchemy ORM框架的示例:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# 创建数据库连接
engine = create_engine('mysql+pymysql://username:password@host:port/database')
# 创建Session类
Session = sessionmaker(bind=engine)
# 创建Base类
Base = declarative_base()
# 定义User类
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
# 创建表
Base.metadata.create_all(engine)
# 创建Session实例
session = Session()
# 插入数据
user = User(name='Tom', age=20)
session.add(user)
session.commit()
# 查询数据
users = session.query(User).all()
for user in users:
print(user.name, user.age)
# 更新数据
user = session.query(User).filter_by(name='Tom').first()
user.age = 21
session.commit()
# 删除数据
user = session.query(User).filter_by(name='Tom').first()
session.delete(user)
session.commit()
# 关闭Session
session.close()
在上面的示例中,我们首先创建了一个数据库连接,然后创建了一个Session类和一个Base类。Session类用于创建Session实例,Base类用于定义ORM映射关系。我们定义了一个User类,它继承自Base类,并定义了表名和字段。然后我们使用Base.metadata.create_all()
方法创建了表。接着我们创建了一个Session实例,并使用session.add()
方法插入了一条数据。使用session.query()
方法查询数据,并使用session.commit()
方法提交事务。我们还演示了如何更新和删除数据,最后使用session.close()
方法关闭Session
。
SQLAlchemy ORM框架提供了丰富的功能和灵活的配置选项,可以满足各种不同的需求。同时,它也有一定的学习曲线,需要花费一些时间来学习和掌握。
1.使用SQLAlchemy查询MySQL数据库的示例
首先,需要安装SQLAlchemy库:
pip install sqlalchemy
然后,连接MySQL数据库:
from sqlalchemy import create_engine
# 连接MySQL数据库
engine = create_engine('mysql+pymysql://username:password@host:port/database')
其中,username
和password
是MySQL数据库的用户名和密码,host
是MySQL数据库的主机名,port
是MySQL数据库的端口号,database
是要连接的数据库名。
接下来,定义一个ORM模型:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
# 定义ORM模型
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
这个ORM模型对应MySQL数据库中的users表,包含id
、name
和age
三个字段。
接下来,使用SQLAlchemy查询数据:
from sqlalchemy.orm import sessionmaker
# 创建Session
Session = sessionmaker(bind=engine)
session = Session()
# 查询所有用户
users = session.query(User).all()
for user in users:
print(user.id, user.name, user.age)
# 查询年龄大于等于18岁的用户
users = session.query(User).filter(User.age >= 18).all()
for user in users:
print(user.id, user.name, user.age)
# 查询年龄大于等于18岁的用户,并按照年龄从小到大排序
users = session.query(User).filter(User.age >= 18).order_by(User.age).all()
for user in users:
print(user.id, user.name, user.age)
以上代码分别查询了所有用户、年龄大于等于18岁的用户、年龄大于等于18岁的用户并按照年龄从小到大排序的结果,并打印出来。
除了以上示例,SQLAlchemy还支持更多的查询方式,如分页查询、聚合查询等。
以上就是关于python数据库编程MySQL数据库的内容分析
本系列文根据以下学习路线展开讲述,由于内容较多,:
从零开始学python到高级进阶路线图
关注公众号:python技术训练营,学习进阶一步到位
适用于零基础学习和进阶人群的python资源:
① 腾讯认证python完整项目实战教程笔记PDF
② 十几个大厂python面试专题PDF
③ python全套视频教程(零基础-高级进阶JS逆向)
④ 百个项目实战+源码+笔记
⑤ 编程语法-机器学习-全栈开发-数据分析-爬虫-APP逆向等全套项目+文档
⑥ 交流学习
⑦ 想要兼职接单
下章讲:Redis数据库