【进阶】使用SQLAlchemy操作关系型数据库
发布时间: 2024-06-27 17:08:09 阅读量: 62 订阅数: 95
![【进阶】使用SQLAlchemy操作关系型数据库](https://images.ctfassets.net/23aumh6u8s0i/3n0YP76FgDncQCjCcNpj8y/7d8b894146ceb3e54df60555e6c7f5c9/class_diagram_tuto)
# 1. SQLAlchemy简介**
SQLAlchemy是一个用于Python编程语言的对象关系映射(ORM)库。它允许Python程序员以面向对象的方式与关系数据库进行交互,从而简化了数据库操作。
SQLAlchemy的主要优点之一是它提供了对不同数据库引擎的统一接口,包括MySQL、PostgreSQL、Oracle和SQLite。这使得使用SQLAlchemy的应用程序可以轻松地切换到不同的数据库,而无需修改应用程序代码。
# 2. SQLAlchemy基础操作
SQLAlchemy的基础操作主要包括模型定义和映射、查询操作、增删改操作。
### 2.1 模型定义和映射
#### 2.1.1 实体类和表结构
在SQLAlchemy中,实体类代表数据库中的表,实体类的属性代表表的列。通过`Table`类可以定义表结构,通过`Column`类可以定义列。
```python
from sqlalchemy import Table, Column, Integer, String
# 定义表结构
user_table = Table('user', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(255)),
Column('age', Integer)
)
```
#### 2.1.2 关系和外键
SQLAlchemy支持定义表之间的关系,包括一对一、一对多、多对多等。外键用于建立表之间的关联。
```python
from sqlalchemy import ForeignKey
# 定义一对多关系
order_table = Table('order', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('user.id'))
)
```
### 2.2 查询操作
#### 2.2.1 基本查询
基本查询包括查询所有数据、按条件查询、排序、分页等。
```python
from sqlalchemy import select
# 查询所有数据
result = session.execute(select(user_table))
# 按条件查询
result = session.execute(select(user_table).where(user_table.c.name == 'John'))
# 排序
result = session.execute(select(user_table).order_by(user_table.c.name))
# 分页
result = session.execute(select(user_table).limit(10).offset(20))
```
#### 2.2.2 复杂查询
复杂查询包括聚合函数、分组、连接等。
```python
from sqlalchemy import func
# 聚合函数
result = session.execute(select([func.count(user_table.c.id)]))
# 分组
result = session.execute(select([user_table.c.name, func.count(user_table.c.id)]).group_by(user_table.c.name))
# 连接
result = session.execute(select([user_table.c.name, order_table.c.id]).join(order_table, user_table.c.id == order_table.c.user_id))
```
#### 2.2.3 关联查询
关联查询可以查询实体之间的关系。
```python
# 关联查询
result = session.execute(select(user_table).join(order_table, user_table.c.id == order_table.c.user_id))
```
### 2.3 增删改操作
#### 2.3.1 插入数据
插入数据可以使用`insert()`方法。
```python
from sqlalchemy import insert
# 插入数据
result = session.execute(insert(user_table).values(name='John', age=30))
```
#### 2.3.2 更新数据
更新数据可以使用`update()`方法。
```python
from sqlalchemy import update
# 更新数据
result = session.execute(update(user_table).where(user_table.c.name == 'John').values(age=31))
```
#### 2.3.3 删除数据
删除数据可以使用`delete()`方法。
```python
from sqlalchemy import delete
# 删除数据
result = session.execute(delete(user_table).where(user_table.c.name == 'John'))
```
# 3.1 关系加载
关系
0
0