On 1/8/06, Michael Bayer
<[EMAIL PROTECTED]> wrote:
I just committed revision 800 which makes the correct adjustment to
properly add reflected foreign keys. However, as of yet i have not
figured out a way to get the foreign keys back when using MySQL and I
suspect there may not be one (table reflection is still only mysql5
compatible also...anyone want to give me a freebie on mysql3/4 ?
oracle ? ) .
So while sqlite and postgres (and someday oracle, when i write
reflection for it) should find their own foreign keys and allow your
example to work, with mysql you need to add them explictly. I added
an "append_item()" method to Column and made it so that code which
explicitly adds foreign keys will cleanly replace any that that were
automatically reflected so you can safely make them explicit in order
to write database-neutral code, i.e.
# fine for sqlite/postgres, wont work in mysql
master = Table( "MASTER", engine, autoload=True)
detail = Table("DETAIL", engine, autoload=True)
j = join(master, detail)
print str(j.onclause)
# fine for sqlite/postgres/mysql
master = Table( "MASTER", engine, autoload=True)
detail = Table("DETAIL", engine, autoload=True)
detail.c.master_id.append_item(ForeignKey("master.master_id"))
j = join(master, detail)
print str(j.onclause )
On Jan 8, 2006, at 10:15 AM, Murat Özsöyler wrote:
> Hi,
>
> When autoloading table metadata from sqlite database, I have
> confronted an error. Foreign key definition for column is not
> reflected in table's foreign_keys property, foreign_key property of
> the related contains a ForeignKey class reference though. This
> causes errors when creating associated mapper which also creates
> one to many relation regarding the problem ForeignKey. If one
> appends column.foreign key to the table.foreign_keys, mapper can be
> created as in the example below.
>
> from sqlalchemy import *
>
> engine = create_engine("sqlite://filename=trial.db")
>
> master = Table( "MASTER", engine, autoload=True)
> detail = Table("DETAIL", engine, autoload=True)
> # DETAIL table contains a column definition like this:
> # MASTER_ID integer references MASTER(ID),
>
> class Master(object):
> pass
> class Detail(object):
> pass
> detail.foreign_keys.append(detail.c.MASTER_ID.foreign_key)
>
> # below command gives error
> # "Cant find any foreign key relationships between 'MASTER'
> # (<sqlalchemy.schema.Table object at 0x01FDBE30>) and 'DETAIL'
> # (<sqlalchemy.schema.Table object at 0x01FDBED0>)" if the line
> # above is commented
> # on the other hand gives
> # "AttributeError: parent" if uncommented.
> #
> # If all is entered from the intepreter, the line below gives no
> # error if the command above is uncommented but the details property
> # is not created
> #
> Master.mapper = mapper(Master, master, properties={
> "details": relation(Detail, detail)
> }
> )
> Am I doing something wrong?
>
> Regards,
>
> Murat Ozsoyler
>
>
>
> -------------------------------------------------------
> 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
-------------------------------------------------------
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_idv37&alloc_id865&opclick
_______________________________________________
Sqlalchemy-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users
--
Jonathan Ellis
http://spyced.blogspot.com

