我有一个中等复杂的数据库结构,其中有多个基于整数“标签”相互引用的表。
结构的简化版本如下
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
中的信息?