Thank you for your support and contributions, Mike, you are a great person.
понедельник, 12 февраля 2018 г., 13:14:24 UTC+3 пользователь Stanislav Lobanov написал: > > Hello, i'm supporting legacy database, and using such models (code > contains examples of my problem, keep reading): > > class Product: # This table is never used straightforward in queries > > type = Column(db.Integer) > name = Column(db.String) > > TYPE_GUITARS = 1 > TYPE_DRUMS = 2 > > __tablename__ = 'product' > __mapper_args__ = { > 'polymorphic_on': type, > } > > > class Guitars(Product): > __mapper_args__ = { > 'polymorphic_identity': Product.TYPE_GUITARS, # Guitars entity > } > > > class Drums(Product): > __mapper_args__ = { > 'polymorphic_identity': Product.TYPE_DRUMS, # Drums entity > } > > > # This query returns nothing. > > query1 = session.query(Musician).filter( > Musician.guitar == Guitars.id, > Musician.drum == Drums.id, > ) > > # Because SQL query built is wrong: > > # select * ... *from product* where ... => no rows returned > > # To fix his i use aliased() function: > > guitars = aliased(Guitars, name='guitars') > drums = aliased(Drums, name='drums') > > query2 = session.query(Musician).filter( > Musician.guitar == guitars.id, > Musician.drum == drums.id, > ) > > # select * ... *from product as guitars, product as drums* where ... => > working fine > > > > My problem is that when i'm using two Polymorphic Models (with one > database table) i always must use aliased() function. This is demonstrated > in example higher. > > As you can see, query1 produces no results, because it is selecting from > *products* table, and applies two filters to it. Instead it should use *two > product table aliases. *It can be achieved with using *aliased()* > function. > > So, finally, my question is: > > Are there any mechanism in sqlalchemy that can automatically apply aliases > to such tables, if it sees their combination in query? > > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.