Python SQLAlchemy core从(0..1)一对一关系中的联接表中进行选择会引发歧义名称InvalidRequestError

Python SQLAlchemy core从(0..1)一对一关系中的联接表中进行选择会引发歧义名称InvalidRequestError,python,sqlalchemy,Python,Sqlalchemy,我正在使用SQLAlchemy core(版本1.13.12)定义两个表,它们必须具有一对一(0..1)关系: things = sa.Table( "things", metadata, sa.Column("sid", sa.Integer, primary_key=True), sa.Column("info", sa.String) ) thingsextra = sa.Table( "thingsextra", metadata,

我正在使用SQLAlchemy core(版本1.13.12)定义两个表,它们必须具有一对一(0..1)关系:

things = sa.Table(
    "things",
    metadata,
    sa.Column("sid", sa.Integer, primary_key=True),
    sa.Column("info", sa.String)
)

thingsextra = sa.Table(
    "thingsextra",
    metadata,
    sa.Column("sid", sa.Integer, sa.ForeignKey(things.c.sid), primary_key=True),
    sa.Column("moreinfo", sa.String)

fullthings = sa.join(things, thingsextra, isouter=True)
我在“things”表中插入了一项,但没有在“thingsextra”中插入。然后我尝试选择左外连接:

query = fullthings.select().where(things.c.sid == sid)
result = conn.execute(query).fetchone()
我得到以下异常:

sqlalchemy.exc.InvalidRequestError: Ambiguous column name 'sid' in result set column descriptions

它似乎不理解定义的ForeignKey是同一个东西,但我不知道如何修复它。

执行查询时不会发生报告的错误(查询本身没有问题),但尝试访问结果上的
sid
列时会发生报告的错误:

>>result.sid
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
sqlalchemy.exc.InvalidRequestError:结果集列描述中的列名“sid”不明确
原因是您的SELECT包含两个具有相同
sid
名称的列,一个来自
things
表,另一个来自您加入的
thingsextra
。您可以通过显示
result.keys()

>result.keys()
['sid'、'info'、'sid'、'moreinfo']
由于
thingsextra
上的列
sid
things
上的
sid
的外键,因此可以从选择中删除此列,使其仅包含一个
sid
列。您可以通过使用
with_only_columns

>>>query=fullthings.select()。仅包含_列([things.c.sid,things.c.info,thingsextra.c.moreinfo])。其中(things.c.sid==1)
>>>结果=connection.execute(query).fetchone()
>>>result.keys()
['sid','info','moreinfo']
>>>result.sid
1.