如何在SQLAlchemy的User类中为id属性创建user_id别名
实现SQLAlchemy模型双属性映射
你可以通过两种方式实现user_id和id映射到同一数据库列,同时兼容两种属性的使用:
方法一:Python原生属性装饰器
利用Python的@property和setter方法,直接将user_id作为id的别名:
class User(Base): id = Column("user_id", String(60), primary_key=True) user_name = Column("user_name", String(60), nullable=False) @property def user_id(self): return self.id @user_id.setter def user_id(self, value): self.id = value
这种方式支持实例的读写操作,比如user.user_id = "u123"和print(user.user_id)都与操作id完全等价。
方法二:SQLAlchemy官方别名工具
使用SQLAlchemy提供的synonym,不仅支持实例操作,还能在ORM查询中直接使用user_id:
from sqlalchemy.orm import synonym class User(Base): id = Column("user_id", String(60), primary_key=True) user_name = Column("user_name", String(60), nullable=False) user_id = synonym('id')
这种方式可以直接用于查询语句,比如session.query(User).filter(User.user_id == "u123"),效果和使用User.id一致,更适合需要在查询中兼容两种属性的场景。
两种方法都能让你在迁移期间同时使用id和user_id,完全共享数据库中的user_id列,不会产生数据差异。
内容的提问来源于stack exchange,提问作者DarkTrick
相关产品推荐
相关产品推荐

