python sqlalchemy模型的建立
SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射(ORM)库,用于管理和操作关系数据库。它为 Python 开发者提供了一种用 Python 对象来运行和管理 SQL 数据库的方式。
目录
SQLAlchemy 的两个核心组成部分
SQLAlchemy 的主要功能
使用 SQLAlchemy 建立模型示例
1、安装 SQLAlchemy
2、导入所需模块
3、创建数据库连接
4、创建基类
5、定义模型
7、创建和使用会话
注意事项
SQLAlchemy 的两个核心组成部分
-
SQLAlchemy Core:提供了数据库的直接访问,通过构建 SQL 表达式来执行查询。适合于需要精细控制 SQL的项目。
-
SQLAlchemy ORM:允许你将 Python 类定义为数据库表对象,以对象的方式进行数据库操作。适合于更高层抽象级别的数据处理。
SQLAlchemy 的主要功能
- 数据库连接和引擎创建:通过
create_engine()
函数建立到数据库的连接。 - 元数据管理:使用
MetaData
和Table
定义数据库结构。 - SQL 表达式:使用 SQL表达式语言进行复杂查询。
- ORM:使用 Python 类和对象操作数据,提高开发效率。
- 关系映射:支持多对多、一对多及多种复杂关系的映射。
- 事务管理:通过
Session
管理事务。
使用 SQLAlchemy 建立模型的过程是将数据库表映射到 Python 类,以便于用面向对象的方法进行数据库操作。下面是建立一个 SQLAlchemy 模型的基本步骤,包括定义类、设置列和关系等。
使用 SQLAlchemy 建立模型示例
1、安装 SQLAlchemy
确保安装 SQLAlchemy 库:
pip install sqlalchemy
2、导入所需模块
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
3、创建数据库连接
使用 create_engine
创建一个数据库连接。这里以 SQLite 为例:
engine = create_engine('sqlite:///example.db')
4、创建基类
使用 declarative_base
创建一个基类,所有模型类将从这个基类继承:
Base = declarative_base()
5、定义模型
定义模型类以映射数据库表和列。例如,我们创建两个简单的表:用户和地址。
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)address_id = Column(Integer, ForeignKey('addresses.id'))address = relationship("Address", back_populates="user")def __repr__(self):return f"<User(name={self.name}, address_id={self.address_id})>"class Address(Base):__tablename__ = 'addresses'id = Column(Integer, primary_key=True)email_address = Column(String, nullable=False)user = relationship("User", back_populates="address")def __repr__(self):return f"<Address(email_address={self.email_address})>"
__tablename__
指定数据库表名。Column
定义表中的列类型和属性。primary_key
用于设置主键。ForeignKey
用于建立表间的外键关系。relationship
用于定义表间的关系,并帮助 SQLAlchemy 在内存中管理这些关系。
6、创建表
通过 Base.metadata.create_all
将定义的模型映射到数据库并创建实际的表结构:
Base.metadata.create_all(engine)
7、创建和使用会话
- 利用
sessionmaker
创建一个用于数据库操作的会话:
Session = sessionmaker(bind=engine)
session = Session()
- 使用会话添加和查询数据:
# 添加记录
new_address = Address(email_address="alice@example.com")
new_user = User(name="Alice", address=new_address)
session.add(new_user)
session.commit()# 查询记录
user = session.query(User).filter_by(name='Alice').first()
print(user)# 关闭会话
session.close()
注意事项
- 对象关系映射(ORM):通过 SQLAlchemy 的 ORM,可以使用 Python 类和对象与数据库进行交互,不需要直接编写 SQL。
- 对象关系管理:
relationship
在处理多表关系时非常有用。 - 事务控制:
session
用于处理数据库事务,为保证数据一致性,需注意对会话进行提交或回滚操作。
使用 SQLAlchemy 建立模型可以帮助我们以面向对象的方式管理数据库,提升代码的可维护性和可读性,利用其强大的 ORM功能实现数据层的一个逻辑抽象和业务逻辑分离。