【问题标题】:Sqlalchemy: Undefined variable from import: metadataSqlalchemy:来自导入的未定义变量:元数据
【发布时间】: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


【解决方案1】:

其实我也有同样的问题。我通过进入 site-packages 文件夹并将 sqlalchemy 文件夹提升了一个级别来解决它。

所以路径是:

C:\Python\Python27\Lib\site-packages\sqlalchemy

这对我有用。

【讨论】:

    【解决方案2】:

    您必须将 flask.ext 添加到 Forced Builtins

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 2010-11-30
      • 2017-09-23
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      相关资源
      最近更新 更多