I wasn't advocating making this connection "in general" (though I like the
autoconfigure option!), but only specifically for the case of reflection -
in this case, we know the DB supports it, and it would result in a better
python interface to the already existing tables.


On Thu, Jul 3, 2014 at 3:20 PM, Mike Bayer <mike...@zzzcomputing.com> wrote:

>
> On 7/3/14, 6:15 PM, Mike Bayer wrote:
> > On 7/3/14, 5:45 PM, Paul Molodowitch wrote:
> >> I noticed that sqlalchemy now properly sets the onpudate / ondelete
> >> properties of foreign keys when reflecting tables:
> >>
> >>
> https://bitbucket.org/zzzeek/sqlalchemy/issue/2183/support-on-delete-update-in-foreign-key
> >>
> >> However, it doesn't seem to set the cascade properties of
> >> relationships to reflect these properties. ie, if the Child table
> >> references the Parent table with a foreign key that has "ON DELETE
> >> CASCADE", and the reference column does not allow NULL, when you
> >> delete a parent table that has children, you will get an error,
> >> because sqlalchemy will try to set the child's ref to NULL.
> >>
> >> ideally we should add "delete" in the relationship's cascade
> >> properties (and probably delete-orphan as well), and then set
> >> passive_updates=True.
> >>
> >> Or am I missing something obvious  / doing something wrong / etc?
> > the configuration of a Column or ForeignKey has never been directly
> > linked to how relationship() gets configured.   passive_updates in
> > particular is a thorny one as not every database supports ON UPDATE
> > CASCADE, but for that matter not every database even supports ON DELETE
> > CASCADE.   There's also lots of variants to ON UPDATE and ON DELETE and
> > SQLAlchemy has no awareness of any of these directly.
> >
> > If we were to explore some automatic configuration of relationship based
> > on these attributes of ForeignKey, it would take place within the
> > automap extension: see
> > http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/automap.html.
> >
> > There are also recipes such that both relationship() and ForeignKey()
> > are generated at once, these are also good places for this kind of thing
> > to happen.  See
> >
> https://bitbucket.org/zzzeek/pycon2014_atmcraft/src/a6d96575bc497ce0c952bb81db9c05d054c98bb5/atmcraft/model/meta/orm.py?at=master
> > for an example of this, I still am thinking of a way recipes like this
> > could also be integrated into SQLAlchemy, possibly as an enhancement to
> > declarative.
>
> or a flag like "autoconfigure=True" on relationship().   this would also
> set up innerjoin=True for joined eager loading if the FK is not null.
> if the primaryjoin condition is too complex (has mulitple FKs),
> autoconfigure would raise an exception.
>
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/sqlalchemy/WaVTCpBOVPk/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to