gpt4 book ai didi

mysql - SQLAlchemy 模型或底层 SQL 表中的别名字段名称

转载 作者:行者123 更新时间:2023-11-29 01:27:12 26 4
gpt4 key购买 nike

是否可以在表的模式或模型的类定义中为 (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。

当然我有两个选择:

  1. 将所选 ID 重命名为“Users.id”,从而失去分析师的可读性。
  2. 将所选 ID 中的数据复制到“Users.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 类必须是 SQLAlchemy declarative_base() 类的子类:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
...

转到 docs以供进一步引用。

关于mysql - SQLAlchemy 模型或底层 SQL 表中的别名字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37420135/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com