ich habe beim Erstellen von Tabellen mit dem folgenden Code ein eigenartiges Problem.
Erstmal der (gekürzte) Code:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from sqlalchemy import *
from settings import config
meta = BoundMetaData(config['db'])
pre = config['prefix']
school_table = Table(pre + 'school', meta,
Column('id', Integer, primary_key = True,
autoincrement = True),
Column('name', Unicode(60)),
mysql_engine = 'innoDB')
job_table = Table(pre + 'job', meta,
Column('id', Integer, primary_key = True,
autoincrement = True),
Column('job', Unicode(40), nullable = False))
candidat_table = Table(pre + 'candidat', meta,
Column('id', Integer, primary_key = True,
autoincrement = True),
Column('name', Unicode(60), nullable = False),
Column('front_name', Unicode(60), nullable = False),
Column('street', Unicode(60), nullable = False),
Column('zipcode', Unicode(60), nullable = False),
Column('city', Unicode(60), nullable = False),
Column('phone', Unicode(25)),
Column('mobile', Unicode(25)),
Column('sex', Unicode(1), nullable = False),
Column('nationality', Unicode(60)),
Column('birthday', Integer),
Column('school_id', Integer,
ForeignKey(school_table.c.id)),
Column('company', Unicode(60)),
Column('email', Unicode(60), default = u''),
Column('date', Integer, default = 0),
Column('day', Unicode(12)),
mysql_engine = 'innoDB')
job_candidat_table = Table(pre + 'job_candidat', meta,
Column('candidat_id', Integer,
ForeignKey(candidat_table.c.id)),
Column('job_id', Integer,
ForeignKey(job_table.c.id)),
mysql_engine = 'innoDB')
category_table = Table(pre + 'category', meta,
Column('id', Integer, primary_key = True,
autoincrement = True),
Column('parent', Integer, nullable = False,
default = 0),
Column('name', Unicode(60), nullable = False),
Column('description', Unicode),
Column('active', Boolean, default = False),
Column('weight', Integer, nullable = False,
default = 100),
Column('time', Integer, nullable = False),
mysql_engine = 'innoDB')
item_table = Table(pre + 'item', meta,
Column('id', Integer, primary_key = True,
autoincrement = True),
Column('text', TEXT, nullable = False),
Column('pic', Unicode(60), default = ''),
Column('choice', Unicode(1), nullable = False),
Column('time', Integer),
Column('active', Boolean, default = False),
mysql_engine = 'innoDB')
item_category_table = Table(pre + 'item_category', meta,
Column('category_id', Integer,
ForeignKey(category_table.c.id)),
Column('item_id', Integer,
ForeignKey(item_table.c.id)),
mysql_engine = 'innoDB')
if __name__ == '__main__':
meta.engine.echo = True
meta.create_all()
Code: Alles auswählen
Traceback (most recent call last):
File "setup_db.py", line 139, in <module>
meta.create_all()
File "/usr/lib/python2.5/site-packages/sqlalchemy/schema.py", line 888, in create_all
connectable.create(self, checkfirst=checkfirst, tables=tables)
File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 416, in create
self._run_visitor(self.dialect.schemagenerator, entity, connection=connection, **kwargs)
File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 440, in _run_visitor
element.accept_schema_visitor(visitorcallable(self, conn.proxy, connection=conn, **kwargs), traverse=False)
File "/usr/lib/python2.5/site-packages/sqlalchemy/schema.py", line 908, in accept_schema_visitor
visitor.visit_metadata(self)
File "/usr/lib/python2.5/site-packages/sqlalchemy/ansisql.py", line 682, in visit_metadata
table.accept_schema_visitor(self, traverse=False)
File "/usr/lib/python2.5/site-packages/sqlalchemy/schema.py", line 269, in accept_schema_visitor
return visitor.visit_table(self)
File "/usr/lib/python2.5/site-packages/sqlalchemy/ansisql.py", line 717, in visit_table
self.execute()
File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 791, in execute
return self.proxy(self.buffer.getvalue(), None)
File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 368, in proxy
return self._execute_raw(statement, parameters)
File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 332, in _execute_raw
self._execute(cursor, statement, parameters, context=context)
File "/usr/lib/python2.5/site-packages/sqlalchemy/engine/base.py", line 351, in _execute
raise exceptions.SQLError(statement, parameters, e)
sqlalchemy.exceptions.SQLError: (OperationalError) (1005, "Can't create
table './assessment/ac_job_candidat.frm' (errno: 150)") '\nCREATE TABLE
ac_job_candidat (\n\tcandidat_id INTEGER, \n\tjob_id INTEGER, \n\t FOREIGN
KEY(candidat_id) REFERENCES ac_candidat (id), \n\t FOREIGN KEY(job_id)
REFERENCES ac_job (id)\n) ENGINE=innoDB\n\n' ()
Ich sitze jetzt seit 3 Tagen nur daran und komme nicht weiter.
Vielleicht kann mir jemand auf die Sprünge helfen?
Danke, Whitie
Edit: Jetzt wo ich den Code ins Forum gepostet habe fällt es mir sofort ins Auge, die job Tabelle ist nicht auf innoDB gesetzt! Problem erledigt.
