On Dec 16, 2005, at 11:24 PM, limodou wrote:


User.mapper = mapper(Mapper, users, properties = dict(
    relation(Address.mapper, lazy=True, private=True)
))


yah where are you seeing that? I think all those are fixed unless you can point me to one

And I also cann't distinguish the differences between OneToMany and
OneToOne, in the mapping code. Can someone show me the differences
between them in code?

Ill show you just where is happens, the thing is I used a bizarre naming convention when I first wrote it (using LEFT, RIGHT, and CENTER to mean "one-to-many", "many-to-one", and "many-to-many"), which is probably why you didnt see it. I might change the convention to be more sane.

the general determination of "direction" is here:

http://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/lib/ sqlalchemy/mapping/properties.py#L105

the three important methods in determining this are:

_match_primaries: determine the JOIN conditions of the parent mapper's table to the child mapper's table. it does this by looping through the foreign keys for both tables and seeing if they reference the other table. If we have an association table, we run the method on that one too to figure out the "secondary join". This method will also try to determine which column in the JOIN condition is the foreign key column, i.e. the one that references the primary key of the other table, and sets that as our "foreign key" property, which indicates what kind of relationship we are.

http://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/lib/ sqlalchemy/mapping/properties.py#L200

_find_dependent: If are not a many-to-many, and we dont yet know what column in our primary JOIN condition is the "foreign key" (maybe because the JOIN condition was explicitly specified and we didnt get to call _match_primaries), which column in the JOIN condition is the "foreign key" that references a primary key? if there are multiple, we just need to find one of them.

http://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/lib/ sqlalchemy/mapping/properties.py#L180

_get_direction: based on our primary join and our foreign key, are we the "right" side in a parent/child relationship (many to one), or the "left" (one to many)? or do we have an association table (a "secondary" join), and we are neither of those, er, what should I call that...how about "center" (hence the goofy names)?

http://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/lib/ sqlalchemy/mapping/properties.py#L167




-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
Sqlalchemy-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to