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