Hello.
I'm having a problem with sqlalchemy and postgresql, and I really
don't know what should I do to correct it.
I'm using sqlalchemy. 0.7.3 with postgresql 2.7.2, with the psycopg2
driver and dialect.
I'm using the ORM with reflection, and as I renamed a primary key
column (from id to product_id), I'm now getting the following
exception:
sqlalchemy.exc.ArgumentError: Mapper Mapper|Product|product could not
assemble any primary key columns for mapped table 'product'
Looking through the logs, I've found that the following query is used
to find primary keys:
SELECT attname FROM pg_attribute
WHERE attrelid = (
SELECT indexrelid FROM pg_index i
WHERE i.indrelid = %(table_oid)s
AND i.indisprimary = 't')
ORDER BY attnum
I've tried to run this query myself, and the result is 'id', and not
'product_id'.
However, when querying the information schema instead of the system
tables, I've got the following results:
select cu.column_name
from information_schema.table_constraints tc
inner join information_schema.key_column_usage cu
on cu.constraint_name = tc.constraint_name and
cu.table_name = tc.table_name and
cu.table_schema = tc.table_schema
where cu.table_name = 'product' and
constraint_type = 'PRIMARY KEY'
and cu.table_schema = 'public';
column_name
-------------
product_id
Is this a postgresql bug for not updating the attribute name in the
system catalog ?
Why did sqlalchemy choose to query the system tables instead of the
information_schema ?
I'm not really sure, but it looks like the system tables are not meant
to be used for this kind of introspection.
Does anyone have any workaround (besides the obvious: remap the table
manually) ?
Thank you.
--
Ronan Dunklau
--
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.