我有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 回答
通过在我的
parent
表中添加以下行解决了我的问题 . 在声明的情况下:否则:SQLAlchemy - Classic Mapper
也试着看看here (SO),也许会有所帮助 .
解决方案是用实际列替换字符串: