如何在SQLAlchemy中为列强制别名?

时间:2016-06-23 15:53:03

标签: python mysql sqlalchemy

我收到了这条消息:

SAWarning:表上的列'id_usuario'被Column('id_usuario',Integer(),table =,primary_key = True,nullable = False)替换,它具有相同的键。考虑use_labels用于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)
    #...

我使用这样的查询:

session.query(UserSearch).filter(UserSearch.category == 'hotel')

生成的查询是:

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文档中的许多示例都生成了像这样的生成的查询。 我没有按照提示警告(“考虑use_labels for select()语句)因为 - 我认为 - 我使用的是Query对象没有select()表达式。也许这就是重点,我错了。

有人可以帮助我吗?

我正在使用Ubuntu 16.04和Python 3.5.1 + mysqlclient == 1.3.7 SQLAlchemy == 1.0.13

0 个答案:

没有答案