2021-02-22 14:47:37
在Python中定义SQLAlchemy模型的核心步骤是创建继承自declarative_base()的类,并通过类变量定义表结构。以下是详细说明和示例:
1. 基础模型定义首先需导入必要模块并创建基类:
from sqlalchemy import Column, Integer, String, ForeignKeyfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import relationshipBase = declarative_base() # 创建基类定义一个简单的用户模型:
class User(Base): __tablename__ = 'users' # 指定表名 id = Column(Integer, primary_key=True) # 主键列 name = Column(String(50)) # 字符串列,长度限制50 email = Column(String(100), unique=True) # 唯一约束__tablename__:必须显式指定表名(否则SQLAlchemy会生成默认名称)。
Column:定义列类型及约束(如Integer、String、primary_key、unique)。
通过ForeignKey和relationship实现关联查询:
一对多关系示例class Post(Base): __tablename__ = 'posts' id = Column(Integer, primary_key=True) title = Column(String(100)) content = Column(String(500)) user_id = Column(Integer, ForeignKey('users.id')) # 外键关联users表 user = relationship('User', back_populates='posts') # 双向关系# 在User类中补充反向引用class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) email = Column(String(100), unique=True) posts = relationship('Post', back_populates='user') # 反向引用PostForeignKey('users.id'):指定外键关联的表和列。
relationship():定义模型间的关联,back_populates实现双向导航。
需通过中间表实现:
from sqlalchemy import Table# 定义中间表association_table = Table( 'user_roles', Base.metadata, Column('user_id', Integer, ForeignKey('users.id')), Column('role_id', Integer, ForeignKey('roles.id')))class Role(Base): __tablename__ = 'roles' id = Column(Integer, primary_key=True) name = Column(String(50))class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) roles = relationship('Role', secondary=association_table) # 多对多3. 性能优化与约束通过以上步骤,可高效定义SQLAlchemy模型,兼顾功能性与性能。实际开发中需根据业务需求调整表结构和约束,并定期优化查询逻辑。