Python SQLAlchemy core从(0..1)一对一关系中的联接表中进行选择会引发歧义名称InvalidRequestError
我正在使用SQLAlchemy core(版本1.13.12)定义两个表,它们必须具有一对一(0..1)关系: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,
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.