Skip to content

Commit 93fea8b

Browse files
committed
feat:新增sqlalthemy
1 parent f27fd66 commit 93fea8b

File tree

1 file changed

+247
-0
lines changed

1 file changed

+247
-0
lines changed
Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
# SQLAlchemy 2.0 介绍
2+
3+
SQLAlchemy 2.0 是 Python 编程语言中的一个强大的 SQL 工具包和对象关系映射(ORM)框架。它在 SQLAlchemy 1.x 的基础上进行了重大更新,旨在提升性能、简化 API、增强类型安全性,并更好地支持现代 Python 特性。以下是对 SQLAlchemy 2.0 的详细介绍:
4+
5+
## 主要特性与变化
6+
7+
### 1. **统一的 API**
8+
SQLAlchemy 2.0 将 Core(核心 SQL 操作)和 ORM(对象关系映射)的 API 进行了统一。开发者可以无缝地在 Core 和 ORM 之间切换,使用一致的接口执行 SQL 查询和对象操作,这大大提高了开发的灵活性和便利性。
9+
10+
### 2. **异步支持**
11+
SQLAlchemy 2.0 引入了对异步编程的原生支持。通过使用 Python 的 `async``await` 关键字,开发者可以编写异步数据库操作代码。这对于构建高并发、高性能的 Web 应用程序尤为重要。
12+
13+
### 3. **类型注解**
14+
SQLAlchemy 2.0 充分利用了 Python 的类型注解功能(Type Hints),提供了更强的类型安全性。这不仅能帮助开发者在编写代码时减少错误,还能提升代码的可读性和可维护性,尤其是在大型项目中。
15+
16+
### 4. **新的查询 API**
17+
SQLAlchemy 2.0 推出了全新的“Select”查询 API,取代了旧版的“Query”API。新 API 设计更直观、更灵活,支持更复杂的查询操作,同时优化了查询性能。
18+
19+
### 5. **性能优化**
20+
SQLAlchemy 2.0 在性能方面进行了大幅改进,包括:
21+
- 更快的 ORM 对象加载速度;
22+
- 更高效的 SQL 语句生成和执行;
23+
- 整体资源占用更低。
24+
25+
### 6. **增强的 ORM 支持**
26+
SQLAlchemy 2.0 改进了 ORM 的功能,包括:
27+
- 更优化的关系加载策略(如 lazy loading、eager loading 等);
28+
- 增强的对象继承支持;
29+
- 更灵活的映射配置方式。
30+
31+
### 7. **简化配置**
32+
SQLAlchemy 2.0 减少了配置过程中的样板代码,简化了初始化和使用流程。开发者可以更快速地搭建和使用数据库连接,提升开发效率。
33+
34+
### 8. **向后兼容性**
35+
尽管 SQLAlchemy 2.0 带来了许多新特性和变化,但它仍然保持了对 1.x 版本的向后兼容性。开发者可以逐步将现有项目迁移到 2.0,而无需完全重写代码。
36+
37+
## 总结
38+
SQLAlchemy 2.0 是一个功能强大且现代化的数据库工具包,它通过统一的 API、异步支持、类型安全性和性能优化,为 Python 开发者提供了高效、灵活的数据库操作方式。无论是构建小型应用还是大型企业系统,SQLAlchemy 2.0 都能满足现代开发需求,是 Python 生态中不可或缺的工具之一。
39+
# 增删改查
40+
以下是使用 SQLAlchemy 2.0 进行增删改查(CRUD)操作的示例代码。这些示例假设你已经安装了 SQLAlchemy 2.0,并有一个数据库(例如 SQLite)可供使用。
41+
42+
---
43+
44+
### 1. 创建数据库引擎和会话
45+
46+
首先,我们需要创建一个数据库引擎和会话。会话是执行 CRUD 操作的主要接口。
47+
48+
```python
49+
from sqlalchemy import create_engine
50+
from sqlalchemy.orm import sessionmaker
51+
52+
# 创建数据库引擎(以 SQLite 为例)
53+
engine = create_engine('sqlite:///example.db', echo=True)
54+
55+
# 创建会话工厂
56+
Session = sessionmaker(bind=engine)
57+
58+
# 创建会话实例
59+
session = Session()
60+
```
61+
62+
- **`echo=True`**:开启日志输出,便于调试。
63+
- **`Session`**:会话工厂,用于生成会话实例。
64+
65+
---
66+
67+
### 2. 定义模型
68+
69+
在 SQLAlchemy 中,数据库表通过模型类定义。以下是一个简单的 `User` 模型示例:
70+
71+
```python
72+
from sqlalchemy import Column, Integer, String
73+
from sqlalchemy.orm import declarative_base
74+
75+
Base = declarative_base()
76+
77+
class User(Base):
78+
__tablename__ = 'users' # 表名
79+
id = Column(Integer, primary_key=True) # 主键
80+
name = Column(String) # 姓名列
81+
age = Column(Integer) # 年龄列
82+
```
83+
84+
- **`declarative_base()`**:创建基类,用于定义模型。
85+
- **`__tablename__`**:指定数据库中的表名。
86+
- **`Column`**:定义表的列及其数据类型。
87+
88+
---
89+
90+
### 3. 创建表
91+
92+
在执行 CRUD 操作之前,需要创建数据库表:
93+
94+
```python
95+
Base.metadata.create_all(engine)
96+
```
97+
98+
这会根据定义的模型在数据库中创建对应的表。
99+
100+
---
101+
102+
### 4. 增(Create)
103+
104+
向数据库中插入新记录:
105+
106+
```python
107+
# 创建一个新用户
108+
new_user = User(name='Alice', age=30)
109+
110+
# 将新用户添加到会话
111+
session.add(new_user)
112+
113+
# 提交会话以保存到数据库
114+
session.commit()
115+
```
116+
117+
- **`session.add()`**:将新记录添加到会话。
118+
- **`session.commit()`**:提交会话,将更改保存到数据库。
119+
120+
---
121+
122+
### 5. 查(Read)
123+
124+
从数据库中查询记录:
125+
126+
```python
127+
# 查询所有用户
128+
users = session.query(User).all()
129+
for user in users:
130+
print(user.id, user.name, user.age)
131+
132+
# 查询特定用户(例如,ID 为 1 的用户)
133+
user = session.query(User).filter_by(id=1).first()
134+
if user:
135+
print(user.name, user.age)
136+
```
137+
138+
- **`session.query()`**:创建查询对象。
139+
- **`.all()`**:返回所有结果的列表。
140+
- **`.filter_by()`**:按条件过滤。
141+
- **`.first()`**:返回第一个匹配的结果。
142+
143+
---
144+
145+
### 6. 改(Update)
146+
147+
更新数据库中的记录:
148+
149+
```python
150+
# 查询要更新的用户
151+
user_to_update = session.query(User).filter_by(id=1).first()
152+
153+
if user_to_update:
154+
# 更新用户的年龄
155+
user_to_update.age = 31
156+
# 提交会话以保存更改
157+
session.commit()
158+
```
159+
160+
- 修改对象属性后,使用 `session.commit()` 提交更改。
161+
162+
---
163+
164+
### 7. 删(Delete)
165+
166+
从数据库中删除记录:
167+
168+
```python
169+
# 查询要删除的用户
170+
user_to_delete = session.query(User).filter_by(id=1).first()
171+
172+
if user_to_delete:
173+
# 从会话中删除用户
174+
session.delete(user_to_delete)
175+
# 提交会话以保存更改
176+
session.commit()
177+
```
178+
179+
- **`session.delete()`**:从会话中移除记录。
180+
- **`session.commit()`**:提交删除操作。
181+
182+
---
183+
184+
### 完整示例代码
185+
186+
以下是将上述步骤整合的完整代码:
187+
188+
```python
189+
from sqlalchemy import create_engine, Column, Integer, String
190+
from sqlalchemy.orm import sessionmaker, declarative_base
191+
192+
# 创建数据库引擎
193+
engine = create_engine('sqlite:///example.db', echo=True)
194+
195+
# 创建会话工厂
196+
Session = sessionmaker(bind=engine)
197+
198+
# 创建会话实例
199+
session = Session()
200+
201+
# 定义模型
202+
Base = declarative_base()
203+
204+
class User(Base):
205+
__tablename__ = 'users'
206+
id = Column(Integer, primary_key=True)
207+
name = Column(String)
208+
age = Column(Integer)
209+
210+
# 创建表
211+
Base.metadata.create_all(engine)
212+
213+
# 增(Create)
214+
new_user = User(name='Alice', age=30)
215+
session.add(new_user)
216+
session.commit()
217+
218+
# 查(Read)
219+
users = session.query(User).all()
220+
for user in users:
221+
print(user.id, user.name, user.age)
222+
223+
# 改(Update)
224+
user_to_update = session.query(User).filter_by(id=1).first()
225+
if user_to_update:
226+
user_to_update.age = 31
227+
session.commit()
228+
229+
# 删(Delete)
230+
user_to_delete = session.query(User).filter_by(id=1).first()
231+
if user_to_delete:
232+
session.delete(user_to_delete)
233+
session.commit()
234+
```
235+
236+
---
237+
238+
### 说明
239+
240+
- **引擎和会话**:引擎负责连接数据库,会话用于执行 CRUD 操作。
241+
- **模型**:通过类定义数据库表结构。
242+
- **增(Create)**:创建实例并提交。
243+
- **查(Read)**:支持多种查询方式。
244+
- **改(Update)**:修改属性后提交。
245+
- **删(Delete)**:删除记录后提交。
246+
247+
这些示例展示了 SQLAlchemy 2.0 的基本 CRUD 操作,你可以根据需求扩展功能,例如添加复杂查询或处理表关系。

0 commit comments

Comments
 (0)