1

外部モジュールでベース変数を宣言すると、上記のエラーが発生します。基本変数は、次の投稿で説明されているように、モジュール db_connect.py で宣言されています: 2 つの異なるファイル間で 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()

質問 1:

上記で、テーブルが作成されますが、data_template.py: Base.metadata.create_all()でメタデータが取得され、エラーで強調表示されます:インポートからの未定義の変数: メタデータはなぜそのエラーが発生するのですか?

質問 2:

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'

ただし、以下のようにインポートすると機能し、テーブルが作成されますが、DataTemplateFile インポートが使用されていないことを示す「警告」が Eclipse に表示されます。それでも、インポートしないと、すぐ上で説明したようにコードが失敗します。

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))
4

2 に答える 2

0

実際、私は同じ問題を抱えていました。そして、site-packagesフォルダーに移動し、sqlalchemyフォルダーをレベルアップすることで解決しました。

パスは次のとおりです。

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

それは私のためにトリックをしました。

ジョー

于 2013-03-07T16:56:50.220 に答える
0

Forced Builtinsにflask.extを追加する必要があります

于 2016-01-21T10:07:28.717 に答える