[sqlalchemy] Can't make an association table use InnoDB

2012-05-30 Thread Jeff
Having difficulty creating a database that includes the following
plumbing:

class Base(object):
id = Column(Integer, primary_key=True)
__table_args__ = {'mysql_engine': 'InnoDB'}

Base = declarative_base(cls=Base)

class Event(Base):
   

Avalanche_Event_Association = Table('Avalanche_Event_Association',
Base.metadata,
Column('avalanche_id', Integer, ForeignKey('Avalanche.id')),
Column('event_id', Integer, ForeignKey('Event.id')),
mysql_engine='InnoDB')

class Avalanche(Base):
   

Doing Base.metadata.create_all(engine) yields:

OperationalError: (OperationalError) (1005, Can't create table
'alstottj.Avalanche_Event_Association' (errno: 150)) '\nCREATE TABLE
`Avalanche_Event_Association` (\n\tavalanche_id INTEGER, \n\tevent_id
INTEGER, \n\tFOREIGN KEY(avalanche_id) REFERENCES `Avalanche` (id), \n
\tFOREIGN KEY(event_id) REFERENCES `Event` (id)\n)ENGINE=InnoDB\n
\n' ()

Commenting out the line mysql_engine='InnoDB' removes the error and
the tables are all created, but the association table is now MyISAM.

I have some feelings on what could be causing the error, but they all
seem improbable. Thoughts?

-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.



Re: [sqlalchemy] Can't make an association table use InnoDB

2012-05-30 Thread Michael Bayer
This might be because the tables you're trying to reference are themselves not 
InnoDB.  Try running DESCRIBE on the referenced tables at the MySQL console to 
help confirm this, as well as the same CREATE TABLE statement below.


On May 30, 2012, at 11:31 PM, Jeff wrote:

 Having difficulty creating a database that includes the following
 plumbing:
 
 class Base(object):
id = Column(Integer, primary_key=True)
__table_args__ = {'mysql_engine': 'InnoDB'}
 
 Base = declarative_base(cls=Base)
 
 class Event(Base):
   
 
 Avalanche_Event_Association = Table('Avalanche_Event_Association',
Base.metadata,
Column('avalanche_id', Integer, ForeignKey('Avalanche.id')),
Column('event_id', Integer, ForeignKey('Event.id')),
mysql_engine='InnoDB')
 
 class Avalanche(Base):
   
 
 Doing Base.metadata.create_all(engine) yields:
 
 OperationalError: (OperationalError) (1005, Can't create table
 'alstottj.Avalanche_Event_Association' (errno: 150)) '\nCREATE TABLE
 `Avalanche_Event_Association` (\n\tavalanche_id INTEGER, \n\tevent_id
 INTEGER, \n\tFOREIGN KEY(avalanche_id) REFERENCES `Avalanche` (id), \n
 \tFOREIGN KEY(event_id) REFERENCES `Event` (id)\n)ENGINE=InnoDB\n
 \n' ()
 
 Commenting out the line mysql_engine='InnoDB' removes the error and
 the tables are all created, but the association table is now MyISAM.
 
 I have some feelings on what could be causing the error, but they all
 seem improbable. Thoughts?
 
 -- 
 You received this message because you are subscribed to the Google Groups 
 sqlalchemy group.
 To post to this group, send email to sqlalchemy@googlegroups.com.
 To unsubscribe from this group, send email to 
 sqlalchemy+unsubscr...@googlegroups.com.
 For more options, visit this group at 
 http://groups.google.com/group/sqlalchemy?hl=en.
 

-- 
You received this message because you are subscribed to the Google Groups 
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.