Python SQLalchemy核心连接和选择,不带重复字段

Python SQLalchemy核心连接和选择,不带重复字段,python,sql,python-3.x,postgresql,sqlalchemy,Python,Sql,Python 3.x,Postgresql,Sqlalchemy,我有两张这样的桌子: 类用户角色(tyrade.BaseModel): “”“SQLAlchemy用户角色模型定义。”“” __tablename\uuuu='user\u role' id=sa.Column(sa.Integer,autoincrement=True,index=True,primary_key=True) type=sa.Column(sa.String,null=False,unique=True) 类用户(tyrade.BaseModel): “”“SQLAlchemy

我有两张这样的桌子:

类用户角色(tyrade.BaseModel):
“”“SQLAlchemy用户角色模型定义。”“”
__tablename\uuuu='user\u role'
id=sa.Column(sa.Integer,autoincrement=True,index=True,primary_key=True)
type=sa.Column(sa.String,null=False,unique=True)
类用户(tyrade.BaseModel):
“”“SQLAlchemy用户模型定义。”“”
__tablename_uu='user'
id=sa.Column(sa.Integer,autoincrement=True,index=True,primary_key=True)
name=sa.Column(sa.String,index=True,nullable=False)
email=sa.Column(sa.String,unique=True,index=True,nullable=False)
password=sa.Column(sa.String,null=False)
出生日期=sa.Column(sa.date,null=False)
role\u id=sa.Column(
sa.Integer,sa.ForeignKey(“user\u role.id”),server\u default='1')
是否已验证=sa.列(
sa.Boolean,server_default=sa.sql.expression.false(),null=false)
创建_date=sa.列(
sa.DateTime(时区=真),
server_default=sa.sql.func.now(),null=False)
用户=用户。\表__
用户角色=用户角色。\表__
我想进行以下查询:

users.join(用户角色)。选择()。其中(users.c.email=='dummy@dummy.com')
查询的执行会产生以下结果:



它有两个名为“id”的字段,一个来自
用户
表,另一个来自
用户角色
。我怎样才能得到我想要的?这非常令人困惑。

您正在加入
User
UserRole

users.join(user_roles)
这就是为什么出现double
id
——两个实体都有
id
。如果运行这样一个查询(连接两个具有相同列名的表),结果将是相同的

第一个id来自第一个表(
用户
),第二个id来自第二个表(
用户角色

我不确定您想做什么,如果您只想要
User
实体,请运行:

select([users]).select_from(users.join(user_roles).where(users.c.email == 'dummy@dummy.com'))
或者,这将省略第二个
id

select([users, user_roles.c.type]).select_from(users.join(user_roles).where(users.c.email == 'dummy@dummy.com'))

如果我想得到类似于
?@AlvaroGarcia没问题,请使用此选择:
select([users,user\u roles.c.type])
我得到以下错误
sqlalchemy.exc.ArgumentError:SQL表达式对象预期,取而代之的是类型为的对象
我正在使用encode/databases项目进行如下查询:
data=await tyrande.db.fetch\u one(query)
@alvarogaria use
tyrande.db.fetch\u row
我仍在获取
sqlalchemy.exc.ArgumentError:需要SQL表达式对象,取而代之的是类型为的对象
在执行
select([users,user\u roles.c.type]