是否可以在表的架构或模型的类定义中为(My)SQL列或SQLAlchemy对象属性添加别名?
例如,给定下表:
Users --------------------- username | ...
我想要以下表格表示形式:
Users --------------------- id | username | ...
其中User.id映射到User.username而不重复此数据。
将其嵌入到表模式中将是理想的,但是使用ORM的解决方案就足够了。
class User(): __tablename__ = 'Users' username = Column(STRING, primary_key=True, alias='id')
详细
我的用例是,我要存储来自各个网站的抓取数据。我正在使用我拥有的最佳用户ID为该数据编制索引,该用户ID可能是用户名,数字ID甚至全名。
但是,为了规范化跨表的操作,我希望每个表都有一个“ id”字段,该字段映射到可能的最佳ID。
当然,我有两种选择:
这是SQLAlchemy Docs中描述的一种优雅的解决方案,它可以完全满足您的要求:
from sqlalchemy.orm import synonym class User(): __tablename__ = 'Users' username = Column(STRING, primary_key=True) id = synonym('username')
它按预期方式工作:
>>> john = session.query(User).filter_by(id='John Doe').first() >>> print([john.id, john.username]) ['John Doe', 'John Doe'] >>> john.id is john.username True
顺便说一句,User该类必须是SQLAlchemydeclarative_base()类的子类:
User
declarative_base()
from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): ...
转到文档以获取更多参考。