Here is the working example:
import sqlalchemy as sa
from sqlalchemy.ext.declarative import declarative_base
engine = sa.create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base()
class Foo(Base):
__tablename__ = 'foo'
id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.String)
def __repr__(self):
return 'Foo(id=%s, name="%s")' % (self.id, self.name)
class Bar(Base):
__tablename__ = 'bar'
id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.String)
foo_id = sa.Column(sa.Integer, sa.ForeignKey('foo.id'),
nullable=False)
foo = sa.orm.relationship('Foo', backref='bars')
Base.metadata.create_all(engine)
Session = sa.orm.sessionmaker(bind=engine)
session = Session()
baz = Foo(name='baz')
qux = Foo(name='qux')
session.add(baz)
session.add(qux)
session.add(Bar(name='spam', foo=baz))
session.add(Bar(name='parrot', foo=baz))
session.commit()
q = session.query(Foo).options(sa.orm.joinedload('bars'))
q = q.order_by(q.statement.c.name)
# q = q.order_by(Foo.name) # Doesn't give an error
print(q.all())
# Gives:
#
# sqlalchemy.exc.OperationalError: (sqlite3.OperationalError)
# ambiguous column name: name
Here I have a two tables with columns name and one references another
with FK. When they are joined - name becomes ambiguous, and SQLAlchemy
ORM resolves this collision automatically. But how to do the same in
case of using SQLAlchemy expressions?
--
With kind regards, Andrew Pashkin.
cell phone - +7 (985) 898 57 59
Skype - waves_in_fluids
e-mail - [email protected]
--
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.