On Mar 26, 2012, at 1:53 PM, Daniel Nouri wrote:
> I'm trying to do a few (maybe too) clever things to make SQLA
> declarative relations less verbose for the most common cases,
> especially for when two relations to the same type exist, and
> therefore a 'primaryjoin' on the relationship is normally required.
this will be simplified in 0.8, you'll be able to pass just foreign_keys in
this scenario, no primaryjoin will be needed
> So with kemi's DeclarativeMeta, you can write this and it'll add the
> foreign keys and primaryjoins for you:
>
> class Customer(Base):
> name = Column(String)
> billing_address = relationship("Address")
> shipping_address = relationship("Address")
>
> My implementation for this works OK _until_ some class defines its own
> table name, e.g.:
>
> class Address(Base):
> __tablename__ = 'myaddresses'
>
> By default, I convert the class name to lower case and use that for a
> table name.
so just in case you weren't aware, you should be using here:
Address.__table__.name
or
class_mapper(Address).local_table.name
If there's no Address or Table yet, then it's not yet time to make decisions
about it.
> For this default case, I'm able to derive the column for
> the ForeignKey that I need to create, so with a
> relationship("Address") I would assume a ForeignKey("address.id").
>
> What I'm looking for is a more robust way of getting the table name.
> When the class itself is passed to relationship(Address), that's not
> an issue, but what if I only have the name of the class and that class
> is not inside the class registry yet?
You should use the "mapper_configured" event - see the example at
http://techspot.zzzeek.org/2011/05/17/magic-a-new-orm/ . This example should
also start to reveal why I'm -1 on using custom metaclasses - the events should
provide a cleaner way to do these things.
> Is there maybe an event that I
> can use to finalize my ForeignKey target fullnames?
>
> kemi's code has a test that illustrates the problem:
> https://github.com/dnouri/kemi/blob/master/kemi/test.py#L101
>
> (Also, any thoughts that you might have on kemi's approach as a whole
> -- maybe someone already did this, please let me know.)
>
--
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.