2015-01-20 16 views
8

Ich habe ein Problem mit SQL Alchemy erstellen, während eine Datenbank zu erstellen versuchen, erhalte ich:sqlalchemy nicht Tabelle finden für Fremdschlüssel

"sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'estate_agent.person_id' could not find table 'person' with which to generate a foreign key to target column 'id'"

Meta Daten:

db = create_engine('postgresql+psycopg2:...//') 
meta = MetaData() 
meta.bind = db 

Tabelle Person:

tbl_person = Table(
    'person', meta, 
    Column('id', Integer, Sequence('seq_person_id'), primary_key=True), 
    Column('name', String(100), unique=True, nullable = False), 
    Column('password', String(40), nullable = False), 
    Column('person_type_id', Integer, ForeignKey("person_type.id"), nullable = False), 
    Column('register_date', DateTime, default = datetime.now), 
    Column('pendencies', String(200)), 
    Column('active', Boolean, default = True), 
    schema = 'public') 

Bug Tabelle:

tbl_estate_agent = Table(
    'estate_agent', meta, 
    Column('person_id', Integer, ForeignKey("person.id"), primary_key = True), 
    Column('prize_range_id', Integer, ForeignKey("prize_range.id"), nullable = False), 
    schema = 'public') 

Normale Tabelle (Erstellen normalerweise die fk)

tbl_person_agent = Table(
    'person_agent', meta, 
    Column('person_id', Integer, ForeignKey("person.id"), primary_key = True), 
    Column('prize_range_id', Integer, ForeignKey("prize_range.id"), nullable = False), 
    schema = 'public') 

Creation Call:

meta.create_all(checkfirst=True) 

komplette Fehlerprotokoll:

Traceback (most recent call last): File "database_client.py", line 159, in meta.create_all(checkfirst=True) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 3404, in create_all tables=tables) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1616, in _run_visitor conn._run_visitor(visitorcallable, element, **kwargs) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1245, in _run_visitor **kwargs).traverse_single(element) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py", line 120, in traverse_single return meth(obj, **kw) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py", line 699, in visit_metadata collection = [t for t in sort_tables(tables) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py", line 862, in sort_tables {'foreign_key': visit_foreign_key}) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py", line 256, in traverse return traverse_using(iterate(obj, opts), obj, visitors) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py", line 247, in traverse_using meth(target) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py", line 853, in visit_foreign_key parent_table = fkey.column.table File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 725, in get obj.dict[self.name] = result = self.fget(obj) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema.py", line 1720, in column tablekey) sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'estate_agent.person_id' could not find table 'person' with which to generate a foreign key to target column 'id'

Antwort

3

die folgende Zeile in meiner parent Tabelle Durch das Hinzufügen gelöst mein Problem. Im Fall von deklarativen:

children = relationship("Child") 

Ansonsten: SQLAlchemy - Classic Mapper

finden Sie auch einen Blick in here (SO) haben, helfen könnte.

2

Die Lösung ist die Saiten mit den tatsächlichen Spalten zu ersetzen:

Column('person_id', Integer, ForeignKey(tbl_person.c.id), primary_key=True) 
+0

Warum funktioniert das? – lcyh

Verwandte Themen