> at the moment a relationship() can't reliably be used as an expression in
> query(), there's a ticket to enhance this functionality at
> http://www.sqlalchemy.org/trac/ticket/2846. Based on what it seems like
> the intent here is, I think you want:
>
> session.query(Uno, DuoDuo).join(Uno.duos).all()
>
> Yes, this works. Thanks.
I was trying the other form because that was what came first in your pycon
tutorial (which was great. Especially sliderepl.)
> Also you probably want to specify table name as lowercase "uno", the
> uppercase "UNO" indicates to SQLAlchemy a case-sensitive name which will be
> quoted as uppercase exactly, unless the schema were actually created with
> quoted uppercase names.
>
I do, but it doesn't work:
NoForeignKeysError: Could not determine join condition between parent/child
> tables on relationship Uno.duos - there are no foreign keys linking these
> tables. Ensure that referencing columns are associated with a ForeignKey
> or ForeignKeyConstraint, or specify a 'primaryjoin' expression.
(The database is not case sensitive - so that can be discounted.) The
reflected foreign key looks the same regardless of if the tablename is in
upper or lower case (on either table - I tried all 4 combinations): I don't
know if that's relevant?
>>> Uno.__table__.foreign_keys
> set([ForeignKey(u'DUO_DUO.ID')])
Then with both __tablename__ as the lower case version:
>>> DuoDuo.__tablename__
'duo_duo'
>>> DuoDuo.__table__
Table('duo_duo', MetaData(bind=None), Column(u'ID', INTEGER(),
table=<duo_duo>, primary_key=True, nullable=False,
default=Sequence(u'ID_identity', start=1, increment=1,
metadata=MetaData(bind=None))), Column(u'STUFF', NVARCHAR(length=50),
table=<duo_duo>), schema=None)
>>> Uno.metadata.tables.keys()
['duo_duo', u'DUO_DUO', 'uno']
>>> Uno.metadata.tables['duo_duo'] == Uno.metadata.tables['DUO_DUO']
False
>>> pprint(Uno.metadata.tables)
immutabledict({'duo_duo': Table('duo_duo', MetaData(bind=None),
Column(u'ID', INTEGER(), table=<duo_duo>, primary_key=True, nullable=False,
default=Sequence(u'ID_identity', start=1, increment=1,
metadata=MetaData(bind=None))), Column(u'STUFF', NVARCHAR(length=50),
table=<duo_duo>), schema=None), u'DUO_DUO': Table(u'DUO_DUO',
MetaData(bind=None), Column(u'ID', INTEGER(), table=<DUO_DUO>,
primary_key=True, nullable=False, default=Sequence(u'ID_identity', start=1,
increment=1, metadata=MetaData(bind=None))), Column(u'STUFF',
NVARCHAR(length=50), table=<DUO_DUO>), schema=None), 'uno': Table('uno',
MetaData(bind=None), Column(u'ID', INTEGER(), table=<uno>,
primary_key=True, nullable=False, default=Sequence(u'ID_identity', start=1,
increment=1, metadata=MetaData(bind=None))), Column(u'DUO_DUO',INTEGER(),
ForeignKey(u'DUO_DUO.ID'), table=<uno>, nullable=False), schema=None)})
--
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.