Wichert Akkerman wrote:
> I have a data model which has accounts and events, and a many-to-many
> relation between the two using a CalendarEvent class. It boils down to
> this:
>
>
> class Account(BaseObject):
> __tablename__ = "account"
> id = schema.Column("id", types.Integer(), primary_key=True)
>
> class Event(BaseObject):
> __tablename__ = "event"
> id = schema.Column("id", types.Integer(), primary_key=True)
>
> class CalendarEvent(mBaseObject):
> __tablename__ = "calendar"
> account_id = schema.Column(types.Integer(),
> schema.ForeignKey(Account.id, onupdate="CASCADE",
> ondelete="CASCADE"),
> primary_key=True, nullable=False)
> account = orm.relation(Account,
> backref=orm.backref("calendar", lazy="dynamic"))
> event_id = schema.Column(types.Integer(),
> schema.ForeignKey(Event.id, onupdate="CASCADE",
> ondelete="CASCADE"),
> primary_key=True, nullable=False)
> event = orm.relation(Event, lazy=False)
>
>
> the calendar backref works fine when you generate a query for it and
> generates SQL like this:
>
> SELECT calendar.account_id AS calendar_account_id, calendar.event_id AS
> calendar_event_id, event_1.id AS event_1_id
> FROM event, calendar LEFT OUTER JOIN event AS event_1 ON event_1.id =
> calendar.event_id
> WHERE :param_1 = calendar.account_id
>
> but if you use acount.calendar.count() the join conditions disappears
> and you end up with this:
>
> SELECT count(1) AS count_1
> FROM calendar, event
> WHERE %(param_1)s = calendar.account_id
why is "event" in either of those queries ? In the first case its valid
for the LEFT OUTER JOIN since that's the eager load, but I also see it
stated a second time, by itself, not associated to anything. Both queries
are incorrect. The mapping you illustrate doesn't involve "event" at all
between Account and Calendar, which wouldn't be rendered as a standalone
FROM object unless you are specifically saying filter(Event.foo == 'bar')
without establishing your join().
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.