【基础】使用SQLAlchemy进行MySQL数据库操作
发布时间: 2024-06-27 10:20:05 阅读量: 81 订阅数: 121
![【基础】使用SQLAlchemy进行MySQL数据库操作](https://img-blog.csdnimg.cn/eed41cfb192a458685d033d4e6915108.png)
# 1. SQLAlchemy简介和安装**
SQLAlchemy是一个流行的Python ORM(对象关系映射)库,它允许Python程序员使用面向对象的编程范式与关系数据库交互。它提供了一个抽象层,简化了数据库操作,使开发人员可以专注于应用程序逻辑而不是底层SQL查询。
要安装SQLAlchemy,可以使用pip命令:
```
pip install sqlalchemy
```
安装完成后,可以导入SQLAlchemy并创建一个引擎对象来连接到数据库:
```python
from sqlalchemy import create_engine
engine = create_engine("postgresql://user:password@host:port/database")
```
# 2. SQLAlchemy ORM基本概念
SQLAlchemy ORM(对象关系映射)提供了一种将对象映射到关系数据库表的方法,从而简化了与数据库的交互。它通过使用类和属性来表示表和列,并通过对象来表示表中的行。
### 2.1 实体和映射
**实体**是与数据库表相对应的类。实体的属性对应于表中的列。
**映射**是将实体与表关联的过程。它通过使用 `declarative_base()` 类和 `Column()` 属性来完成。
```python
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
email = Column(String(100), unique=True)
```
在上面的代码中,`User` 类是一个实体,它映射到名为 `users` 的表。`id`、`name` 和 `email` 属性对应于表中的同名列。
### 2.2 关系和关联
**关系**表示实体之间的数据关联。SQLAlchemy ORM 支持多种关系类型,包括:
- **一对一:**一个实体只能与一个另一个实体关联。
- **一对多:**一个实体可以与多个另一个实体关联。
- **多对多:**多个实体可以与多个另一个实体关联。
**关联**是创建关系的过程。它通过使用 `relationship()` 方法来完成。
```python
from sqlalchemy import ForeignKey
class Order(Base):
__tablename__ = 'orders'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", back_populates="orders")
```
在上面的代码中,`Order` 类与 `User` 类有一个一对多的关系。`user_id` 列是外键,它引用 `users` 表中的 `id` 列。`relationship()` 方法创建了 `user` 属性,它表示订单所属的用户。
**反向关联**允许从一个实体导航到另一个实体。在上面的示例中,`User` 类有一个 `orders` 属性,它返回与该用户关联的所有订单。
# 3. SQLAlchemy ORM操作
### 3.1 创建、更新和删除对象
#### 创建对象
使用 `session.add()` 方法创建新对象:
```python
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
engine = create_engine('sqlite:///database.db')
Session = sessionmaker(bind=engine)
session = Session()
user = User(name='John Doe', email='john@example.com')
session.add(user)
session.commit()
```
#### 更新对象
使用 `s
0
0