the error that seems to be popular this week is related to people
trying to add foreign keys to reflected tables; we dont have unit
tests set up for this yet so its likely that the tables are getting
conflicting column objects set up. the reason it probably doesnt
work at the table reflection level is because the initalization of
the ForeignKey object results in an "autoload" of the related table;
and it probably doesnt set itself up properly, and/or when you later
go and explcitly autoload the related table, it gets itself confused
somehow.
you might want to try defining all of your tables first before
defining any mappers...that way when the Mapper gets a hold of the
table, it has the latest listing of Column objects on the Table.
then again that might not fix it.
the error generally means that the Column object which the Mapper
pulls off the Table at flush time is not the same Column object which
the mapper had at initialization time, when it first matched up each
Column to an attribute on the mapped class (which is represented in
the Mapper via a ColumnProperty).
as a last resort you might have to forego the "autoload" flag (or use
explicit primaryjoin/secondaryjoin args on each mapper) until i have
time to insure that reflection deals with newly or re-defined foreign
keys smoothly.
On Sep 26, 2006, at 7:32 AM, Matias Hermanrud Fjeld wrote:
> Hello.
>
> I'm working with OSCommerce, which has a poorly defined schema. There
> are no foreignkey constraints, so i have redefined the relevant
> columns
> in SA (see below).
>
> I add some rows, and when flushing i get the following error:
>
> sqlalchemy.exceptions.InvalidRequestError: Column
> 'products_description.products_id' is not available, due to
> conflicting
> property 'products_id':ColumnProperty
> (['products_description.products_id'])
>
> What are the usual causes of this type of error?
>
> Here is the code loading the tables and setting up mappings:
>
> [snip Product and Description class definitions]
>
> p_d_table = sa.Table('products_description', meta,
> sa.Column('products_id', sa.Integer,
> sa.ForeignKey
> ('products.products_id')),
> autoload=True)
>
> sa.mapper(Description, p_d_table)
>
> p_table = sa.Table('products', meta,
> [snip manufacturers_id column]
> autoload=True)
> sa.mapper(
> Product, p_table,
> properties=dict(
> descriptions=sa.relation(Description),
> [snip categories relation]
> )
> )
>
> Here are the relevant tables:
>
> mysql> describe products;
> +-------------------------+---------------+------+-----+---------
> +----------------+
> | Field | Type | Null | Key | Default |
> Extra |
> +-------------------------+---------------+------+-----+---------
> +----------------+
> | products_id | int(11) | NO | PRI | NULL |
> auto_increment |
> | products_quantity | int(4) | NO | |
> | |
> | products_model | varchar(30) | YES | | NULL
> | |
> | products_image | varchar(64) | YES | | NULL
> | |
> | products_price | decimal(15,4) | NO | |
> | |
> | products_date_added | datetime | NO | MUL |
> | |
> | products_last_modified | datetime | YES | | NULL
> | |
> | products_date_available | datetime | YES | | NULL
> | |
> | products_weight | decimal(5,2) | NO | |
> | |
> | products_status | tinyint(1) | NO | |
> | |
> | products_tax_class_id | int(11) | NO | |
> | |
> | manufacturers_id | int(11) | YES | | NULL
> | |
> | products_ordered | int(11) | NO | | 0
> | |
> | products_distributor | varchar(20) | NO | |
> | |
> +-------------------------+---------------+------+-----+---------
> +----------------+
>
> mysql> describe products_description;
> +----------------------+--------------+------+-----+---------
> +----------------+
> | Field | Type | Null | Key | Default |
> Extra |
> +----------------------+--------------+------+-----+---------
> +----------------+
> | products_id | int(11) | NO | PRI | NULL |
> auto_increment |
> | language_id | int(11) | NO | PRI | 1
> | |
> | products_name | varchar(64) | NO | MUL |
> | |
> | products_description | text | YES | | NULL
> | |
> | products_url | varchar(255) | YES | | NULL
> | |
> | products_viewed | int(5) | YES | | 0
> | |
> +----------------------+--------------+------+-----+---------
> +----------------+
>
>
> I'm new to SA, so if I'm missing something obvious, please bear
> with me.
>
> --
> Matias Hermanrud Fjeld
> Copyleft Solutions AS
>
>
> ----------------------------------------------------------------------
> ---
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to
> share your
> opinions on IT & business topics through brief surveys -- and earn
> cash
> http://www.techsay.com/default.php?
> page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Sqlalchemy-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Sqlalchemy-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users