当我在外部模块中声明基本变量时出现上述错误。基本变量在模块 db_connect.py 中声明,如本文所述:如何跨两个不同文件创建 ForeignKey 关系
在db_connect.py中,我声明了以下内容:
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Engine = create_engine('postgresql://postgres:pass@server:5432/mydb')
Base = declarative_base()
在data_template.py我有以下内容:
from db_connect import Engine, Base
class DataTemplate (Base):
__tablename__ = 'data_template'
id = Column(Integer(5), primary_key=True, autoincrement = True)
version = Column(String(3), nullable = False)
specification = Column(String(1), nullable = False)
__table_args__ = (UniqueConstraint("version", "specification"), )
Base.metadata.create_all()
问题一:
有了上面的内容,创建的表很好,但是我在data_template.py 中获得了元数据: Base.metadata.create_all()突出显示了错误:导入的未定义变量:元数据为什么会发生该错误?
问题二:
在load_file.py我必须从data_template.py模块导入 DataTemplateFile 类。如果我不执行此导入,我会收到错误消息
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'load_file.data_template_file_id' could not find table 'data_template_file' with which to generate a foreign key to target column 'id'
但是,当我按如下方式导入时,它可以工作并创建表,但我在 Eclipse 中收到“警告”指示,表明 DataTemplateFile 导入未使用。但是,如果我不导入它,则代码将失败,如上文所述。
from data_template import DataTemplateFile
class LoadFile (Base):
__tablename__ = "load_file"
id = Column(Integer(10), primary_key = True)
file_name = Column(String(250), nullable = False, unique = True)
data_template_file_id = Column(Integer, ForeignKey('data_template_file.id'), nullable = False)
loadfile = relationship("DataTemplateFile",backref=backref('LoadFile', order_by=id))