【发布时间】:2014-08-18 01:55:19
【问题描述】:
我有一个类似下面的架构:
CREATE TABLE user (id integer, name text);
CREATE TABLE link (id1 integer, id2 integer, type integer);
CREATE TABLE address (id integer, address text);
link 表是一个通用连接表:我们使用type 列来限制两个实体之间的连接(例如,type=1001 表示用户到地址的关系)。
我想使用 SQLAlchemy 表达以下查询:
SELECT *
FROM user
JOIN link ON
link.id1 = user.id
AND link.type = 1001
JOIN address ON
address.id = link.id2
就是这样,在关系的辅助连接参数中声明附加过滤器(即link.type = 1001)。
我有以下 SQLAlchemy 定义:
link = Table('link', db.metadata,
Column('id1', INTEGER(), ForeignKey('core_user.user_id')),
Column('id2', INTEGER(), ForeignKey('core_comm.id')),
Column('type', INTEGER())
)
class User(db.Model):
__tablename__ = 'user'
__schema__ = 'public'
id = Column('id', INTEGER(), primary_key=True)
name = Column('name', TEXT())
addresses = relationship('Address', secondary=link)
class Address(db.Model):
__tablename__ = 'address'
__schema__ = 'public'
id = Column(INTEGER(), primary_key=True)
address = Column(Text())
它在 3 个表之间正确连接,我得到记录,但我找不到在辅助连接上应用其他过滤器的方法。我什至不确定这是正确的方法。
理想情况下,我想在 User 对象中获得一个 addresses 字段,这将是 Address 对象的列表,可能会被反向引用。
有什么提示吗? 谢谢!
【问题讨论】:
标签: python sqlalchemy