【基础】用SQLAlchemy连接数据库:Python与SQL的桥梁
发布时间: 2024-06-25 14:40:20 阅读量: 72 订阅数: 107
Python的SQLalchemy模块连接与操作MySQL的基础示例
![【基础】用SQLAlchemy连接数据库:Python与SQL的桥梁](https://img-blog.csdnimg.cn/ca9800aea5684aa38be7b84c725b9b61.png)
# 1. SQLAlchemy 简介**
SQLAlchemy 是一个功能强大的 Python ORM(对象关系映射)库,它允许您使用 Python 对象与关系数据库进行交互。它提供了一个高级抽象层,使您可以轻松地查询、更新和管理数据库中的数据。SQLAlchemy 的主要优点包括:
* **对象关系映射:**它允许您将数据库表映射到 Python 类,从而使您可以使用 Python 对象来表示和操作数据库中的数据。
* **灵活性和可扩展性:**它支持多种数据库后端,包括 PostgreSQL、MySQL 和 SQLite,并且可以轻松扩展以满足各种应用程序需求。
* **强大的查询功能:**它提供了高级查询功能,包括关系查询、联接和聚合,使您可以轻松地检索和处理复杂的数据。
# 2. SQLAlchemy基本操作
### 2.1 数据库连接和会话管理
#### 2.1.1 创建引擎和会话
在SQLAlchemy中,`引擎`是连接数据库的接口,而`会话`是与数据库交互的具体对象。
```python
from sqlalchemy import create_engine, sessionmaker
# 创建引擎
engine = create_engine("postgresql://user:password@host:port/database")
# 创建会话工厂
Session = sessionmaker(bind=engine)
# 创建会话
session = Session()
```
* **参数说明:**
* `create_engine`函数的参数指定了数据库连接信息,包括数据库类型、用户名、密码、主机、端口和数据库名称。
* `sessionmaker`函数的参数`bind`指定了会话与哪个引擎绑定。
#### 2.1.2 会话的管理和关闭
会话是轻量级的对象,在使用后应及时关闭以释放资源。
```python
# 提交事务
session.commit()
# 回滚事务
session.rollback()
# 关闭会话
session.close()
```
* **逻辑分析:**
* `commit()`方法提交当前会话中的所有更改。
* `rollback()`方法回滚当前会话中的所有更改。
* `close()`方法关闭会话并释放所有资源。
### 2.2 对象关系映射(ORM)
#### 2.2.1 定义模型类
ORM(对象关系映射)将数据库中的表映射为Python类。
```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)
```
* **参数说明:**
* `declarative_base()`函数定义了模型类的基类。
* `__tablename__`属性指定了该模型类映射的数据库表名。
* `Column`类定义了模型类的属性,包括数据类型、主键约束、非空约束和唯一性约束。
#### 2.2.2 查询和操作对象
使用ORM可以方便地查询和操作数据库对象。
```python
# 查询所有用户
users = session.query(User).all()
# 获取第一个用户
user = session.query(User).first()
# 添加一个新用户
new_user = User(name='John Doe', email='john@example.com')
session.add(new_user)
# 更新一个用户
user.name = 'Jane Doe'
session.commit()
# 删除一个用户
session.delete(user)
```
* **逻辑分析:**
* `query()`方法返回一个查询对象,用于构建查询条件。
* `all()`方法返回查询结果的所有对象。
* `first()`方法返回查询结果的第一个对象。
* `add()`方法将一个新对象添加到会话中。
* `commit()`方法提交当前会话中的所有更改。
* `delete()`方法将一个对象从会话中删除。
# 3.1 关系和关联
#### 3.1.1 定义关系
在SQLAlchemy中,关系通过`relationship()`方法定义,它指定了两个模型类之间的关系类型。关系类型可以是:
- **一对一 (OneToOne)**:一个模型类的每个实例最多与另一个模型类的单个实例相关联。
- **一对多 (OneToM
0
0