【问题标题】:SQLAlchemy PostgreSQL row_to_json relationshipSQLAlchemy PostgreSQL row_to_json 关系
【发布时间】:2018-11-27 02:27:41
【问题描述】:

我想知道是否可以使用服务器函数 jsonbrow_to_json 来包装关系,而不是使用 python 将结果转换为 json。

当我检索文档时,我希望将 Image 对象作为 json。

class Documentation(Base):

    __tablename__ = 'documentation'
    id = Column(UUID, server_default=text("uuid_generate_v4()"), primary_key=True)
    url =  Column(String, nullable=False)
    description = Column(String)
    name = Column(String)
    image_id = Column(UUID,ForeignKey(Image.id))
    image = relationship(Image,backref="image_data",lazy="subquery")


class Image(Base):

    __tablename__ = 'image'
    id = Column(UUID, server_default=text("uuid_generate_v4()"), primary_key=True)
    name = Column(VARCHAR(128), nullable=False)
    info = Column(JSONB)
    image = Column(BYTEA)

我要使用 sqlalchemy 翻译的 sql 请求示例:

select doc.*,
row_to_json(image.*) as image
from documentation doc
left join image on doc.image_id = image.id;

SQLAlchemy(当前请求)

q = Session.query(Documentation).all()

是否可以使用 sqlalchemy 服务器端(在 postgresql 上)来做到这一点? (针对性能问题)

谢谢

【问题讨论】:

标签: python json postgresql sqlalchemy relationship


【解决方案1】:

现在这是两个不同的表。如果您想使用 jsonb 而不仅仅是转换为 JSON 作为文档的属性,您需要使用兼容的 json 类型之一将所有图像数据移动到文档下的新列中。由于这是 1:1 的关系,因此它们无论如何都属于同一个表。

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 2014-02-24
    • 2013-10-22
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多