On Aug 21, 2013, at 5:37 PM, Gerald Thibault <dieselmach...@gmail.com> wrote:

> To make it sqlalchemy specific, how do i cause generated CREATE statements to 
> use absolute schema.table names for foreign key references?

you either need to specify "schema" in your referenced Table def, or you'd 
otherwise have to intercept the AddConstraint construct using @compiles to 
inject the schema name that you'd want there.


> 
> I realized the reason MyISAM had no issue with it was because it ignores all 
> those lines, so even if they were wrong (which they seem to be), it wouldn't 
> care.
> 
> Here is the relevant output from SHOW ENGINE STATUS INNODB:
> 
> ------------------------
> LATEST FOREIGN KEY ERROR
> ------------------------
> 130821 13:22:18 Error in foreign key constraint of table test2/registrations:
> FOREIGN KEY(user_id) REFERENCES user_vars (id)
> )ENGINE=InnoDB:
> Cannot resolve table name close to:
>  (id)
> )ENGINE=InnoDB
> 
> It seems the schema is mandatory when operating cross-schema.
> 
> Is there a way to get this behavior from sqlalchemy?
> 
> If MyISAM ignores the FK declarations, and InnoDB requires a schema in order 
> to have cross-schema fk references, it seems like using schema.table format 
> would fix this.
> 
> On Wednesday, August 21, 2013 1:57:07 PM UTC-7, Michael Bayer wrote:
> you might try asking this as a generic MySQL question on stackoverflow, I 
> don't really know how MySQL does cross-schema work.  my rough understanding 
> was "not much".
> 
> 
> 
> 
> On Aug 21, 2013, at 4:17 PM, Gerald Thibault <diesel...@gmail.com> wrote:
> 
>> I have a User class, and a Registration class with a FK to User.id.
>> 
>> When I try to create these on a db using InnoDB as default, I get this error:
>> 
>> sqlalchemy.exc.OperationalError: (OperationalError) (1005, "Can't create 
>> table 'test2.registrations' (errno: 150)") '\nCREATE TABLE 
>> test2.registrations (\n\tid INTEGER NOT NULL AUTO_INCREMENT, \n\tuser_id 
>> INTEGER, \n\tPRIMARY KEY (id), \n\tFOREIGN KEY(user_id) REFERENCES user_vars 
>> (id)\n)\n\n' ()
>> 
>> If i copy this query and try it manually via MySQL Workbench, it still 
>> fails. 
>> 
>> If I prepend the default schema to the table (user_vars -> 
>> 'test.user_vars'), the query succeeds.
>> 
>> I'm not entirely sure what is happening here. In the absence of an explicit 
>> schema, I thought mysql used the active schema to handle table lookups, but 
>> it looks like this isn't the case. Is it 'switching' the active schema to 
>> the one hosting the new table? Also, this works perfectly with MyISAM 
>> tables, so I have even less to go on.
>> 
>> Any ideas? Do I need explicit schema declarations for every fk declared?
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sqlalchemy+...@googlegroups.com.
>> To post to this group, send email to sqlal...@googlegroups.com.
>> Visit this group at http://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/groups/opt_out.
>> <innodb.py>
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/groups/opt_out.

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to