2013-02-15 51 views
1

當我在外部模塊中聲明基本變量時,出現上述錯誤。基礎變量是一個模塊db_connect.py聲明的指示在這個崗位:How to create ForeignKey relationship across two different filesSqlalchemy:來自導入的未定義變量:元數據

db_connect.py我已經宣佈了follwing:

from sqlalchemy import create_engine 
from sqlalchemy.ext.declarative import declarative_base 
Engine = create_engine('postgresql://postgres:[email protected]: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)) 
+0

難道這些警告顯示出來只在Eclipse?另外,您是否檢查過數據庫以確保正在創建外鍵? – 2013-02-28 05:35:13

+0

@CarlosV是的,它們只出現在Eclipse中。是的,外鍵正在工作。在問題1中,eclipse是否無法檢測到我在文件頂部完成的導入操作?但是,這怎麼可能,因爲代碼仍然運行? – lukik 2013-02-28 14:23:14

+0

我猜測* Eclipse正在進行某種形式的自省並且無法檢測到'declarative_base()'返回的是什麼類型的對象?對不起,我不能有更多的幫助。 – 2013-02-28 16:15:25

回答

0

其實我有同樣的問題。我通過進入site-packages文件夾並調出sqlalchemy文件夾來解決這個問題。

這樣的路徑是:

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

該訣竅我。

0

你必須flask.ext添加到強制內建命令