【发布时间】:2016-01-21 18:07:28
【问题描述】:
当我在外部模块中声明基本变量时出现上述错误。基本变量在模块 db_connect.py 中声明,如本文所述:How to create ForeignKey relationship across two different files
在 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() 中获得了元数据,并突出显示了错误:Undefined variable from import: metadata 为什么会出现这个错误?
问题二:
在 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))
【问题讨论】:
-
这些警告是否仅在 Eclipse 中显示?另外,您是否检查了数据库以确保正在创建外键?
-
@CarlosV 是的,它们只出现在 Eclipse 中。是的,外键正在工作。是不是在问题一中,eclipse 无法检测到我在文件顶部所做的导入?但怎么可能因为代码还在运行呢?
-
我猜测 Eclipse 正在进行某种形式的自省,但无法检测到
declarative_base()返回的对象类型?抱歉,我无法提供更多帮助。
标签: python sqlalchemy