如何在SQLAlchemy中强制列别名?

2024-09-28 21:23:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我收到这样的信息:

SAWarning:表上的“id_usario”列被具有相同键的列('id_usario',Integer(),table=,primary_key=True,nullable=False)替换。考虑对select()语句使用_标签。

我的模型是:

from settings import DATABASE

engine = create_engine('mysql+mysqldb://%s:%s@%s/%s?charset=utf8' % (DATABASE["username"], DATABASE["password"], DATABASE["host"], DATABASE["database"]))
Session = sessionmaker(bind=engine)
session = Session()

metadata = MetaData()
Base = declarative_base(metadata=metadata)

class UserSearch(Base):
    __tablename__ = 'user_search'

    id = Column(Integer, primary_key=True)
    id_usuario = Column("id_usuario", Integer, ForeignKey("usuario.id_usuario"))
    user = relationship("User", lazy=False, innerjoin=True)
    #...

class User(Base):
    __tablename__ = 'usuario'

    id_usuario = Column("id_usuario", Integer, primary_key=True, nullable=False)
    #...

我使用这样的查询:

^{pr2}$

生成的查询是:

SELECT user_search.id, user_search.id_usuario, usuario_1.id_usuario
FROM user_search JOIN usuario AS usuario_1 ON usuario_1.id_usuario = user_search.id_usuario WHERE user_search.category = 'hotel'

因此,我想弄清楚如何查询哪些列是别名,例如:

SELECT user_search.id as user_search_1_id, user_search.id_usuario as user_search_1_id_usuario, usuario_1.id_usuario as user_1_id_usuario
FROM user_search JOIN usuario AS usuario_1 ON usuario_1.id_usuario = user_search.id_usuario WHERE user_search.category = 'hotel'

我注意到SQLAlchemy文档中有许多类似这样的生成查询的例子。 我没有遵循警告中的提示(“考虑为select()语句使用_标签”),因为-我想-我使用的是查询对象没有select()表达式。也许这就是重点,我错了。在

有人能帮我吗?

我使用的是Ubuntu16.04和Python3.5.1+mysqlclient==1.3.7 SQLAlchemy==1.0.13


Tags: keyidfalsetruesearchbasecolumninteger