首页 文章

SQLalchemy找不到用于创建外键的表

提问于
浏览
13

我有SQL Alchemy的问题,在尝试创建数据库时,我得到:

“sqlalchemy.exc.NoReferencedTableError:与列'estate_agent.person_id'关联的外键无法找到用于生成目标列'id'的外键的表'person'”

元数据:

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

人员表:

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')

错误表:

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')

普通表(通常创建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')

创作电话:

meta.create_all(checkfirst=True)

完整的错误日志:

Traceback(最近一次调用最后一次):文件“database_client.py”,第159行,在meta.create_all中(checkfirst = True)文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/schema .py“,第3404行,在create_all tables = tables中)文件”/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py“,第1616行,在_run_visitor中conn._run_visitor(visitorcallable, element,** kwargs)文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py”,第1245行,在_run_visitor ** kwargs).traverse_single(element)文件“/ usr /local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py“,第120行,在traverse_single中返回meth(obj,** kw)文件”/usr/local/lib/python2.7/dist -packages / sqlalchemy / sql / ddl.py“,第699行,在visit_metadata collection = [t for sort in sort(tables)File”/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl .py“,第862行,在sort_tables {'foreign_key':visit_foreign_key}中)文件”/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py“,第256行,在trav中erse返回traverse_using(iterate(obj,opts),obj,visitor)文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/visitors.py”,第247行,在traverse_using meth(target)中文件“/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py”,第853行,在visit_foreign_key中parent_table = fkey.column.table文件“/usr/local/lib/python2.7 /dist-packages/sqlalchemy/util/langhelpers.py“,第725行,在获取obj.dict [self.name] = result = self.fget(obj)文件”/usr/local/lib/python2.7/dist -packages / sqlalchemy / sql / schema.py“,第1720行,在列tablekey中)sqlalchemy.exc.NoReferencedTableError:与列'estate_agent.person_id'关联的外键无法找到用于生成外键的表'person'目标列'id'

2 回答

  • 5

    通过在我的 parent 表中添加以下行解决了我的问题 . 在声明的情况下:

    children = relationship("Child")
    

    否则:SQLAlchemy - Classic Mapper

    也试着看看here (SO),也许会有所帮助 .

  • 9

    解决方案是用实际列替换字符串:

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

相关问题