如何使用关系来配置“选择”查询

时间:2019-07-29 15:40:39

标签: python sqlite orm sqlalchemy

我有一个中等复杂的数据库结构,其中有多个基于整数“标签”相互引用的表。

结构的简化版本如下

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import (Column, Integer, String, ForeignKeyConstraint, select, cast)
from sqlalchemy.orm import (relationship, column_property)

Base = declarative_base()

class BaseTable(Base):
    __tablename__ = "base"

    tag1 = Column(Integer, primary_key=True)
    tag2 = Column(Integer, primary_key=True)

    prop1 = Column(String)

class DerivedTable(Base):
    __tablename__ = "derived"

    tag1 = Column(Integer, primary_key=True)
    tag2 = Column(Integer, primary_key=True)
    tag3 = Column(Integer, primary_key=True)

    ForeignKeyConstraint([tag1, tag2], [BaseTable.tag1, BaseTable.tag2])

    base = relationship(BaseTable, foreign_keys=[tag1, tag2])

    name = column_property(
            select([BaseTable.prop1]).where((BaseTable.tag1 == tag1) & (BaseTable.tag2 == tag2)).as_scalar() +
            "_" + cast(tag1, String) + "." + cast(tag2, String) + "." + cast(tag3, String) )

使用name字段的原因是,我有第三个表,该表仅知道如何使用此名称查找derived表中的元素。

这很好,但是我对名称中使用的where语句不太满意-这只是复制base关系(它本身就是从{复制信息{1}}。

ForeignKeyConstraint的定义中是否可以使用base中的信息?

0 个答案:

没有答案