私はSQLAlchemyを使い始めています。私は疑問に思っています...私は自分のモデルにたくさんのテーブルを持っています。私は私のモデルで持っている各テーブルのための自分のファイルを持っていたいと思います。 に続いmeta.pySQLAlchemy - テーブルテンプレートを作成
で
from sqlalchemy import MetaData
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects import postgresql
import sqlalchemy as sa
__all__ = ['Session', 'engine', 'metadata']
# SQLAlchemy database engine. Updated by model.init_model()
engine = None
# SQLAlchemy session manager. Updated by model.init_model()
Session = scoped_session(sessionmaker())
# Global metadata. If you have multiple databases with overlapping table
# names, you'll need a metadata for each database
metadata = MetaData()
# declarative table definitions
Base = declarative_base()
Base.metadata = metadata
schema = 'srbam_dev'
_
"""The application's model objects"""
import sqlalchemy as sa
from sqlalchemy import orm
from models import meta
from models.filers import Filer
from models.vfilers import Vfiler
from models.filer_options import FilerOption
def init_models(engine):
"""Call me before using any of the tables or classes in the model"""
## Reflected tables must be defined and mapped here
#global reflected_table
#reflected_table = sa.Table("Reflected", meta.metadata, autoload=True,
# autoload_with=engine)
#orm.mapper(Reflected, reflected_table)
#
meta.engine = sa.create_engine(engine)
meta.Session.configure(bind=meta.engine)
class Basic_Table(object):
id = sa.Column(
postgresql.UUID(),
nullable=False,
primary_key=True
)
created = sa.Column(
sa.types.DateTime(True),
nullable=False
)
modified = sa.Column(
sa.types.DateTime(True),
nullable=False
)
_.py initと、その後のすべてにおいて、以下:
私は現在、次のコードを使用しています私のモデル
from models.meta import Base
from models.meta import Basic_Table
from models.meta import schema
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
class Filer(Base,Basic_Table):
これは、だけで正常に動作していれば、私は外部キーが
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 't_vfilers.filer_id' could not find table 't_filers' with which to generate a foreign key to target column 'id'
を言う使用したら、私は、テーブルの上にいくつかの外部キーを使用して起動しないように私は(ファイラークラスで直接IDキーを定義しようとしましたが、宣言からBasic_Tableを削除します)、これでは問題は解決しません。
データベースを作成するための私のコードは、モデルからsqlalchemy.engine.urlインポートURL からこの #!は/ usr/binに/ Pythonのような 輸入のConfigParser に見えるが*
config = ConfigParser.RawConfigParser()
config.read('conf/core.conf')
db_url = URL(
'postgresql+psycopg2',
config.get('database','username'),
config.get('database','password'),
config.get('database','host'),
config.get('database','port'),
config.get('database','dbname')
)
init_models(db_url)
meta.Base.metadata.drop_all(bind=meta.engine)
meta.Base.metadata.create_all(bind=meta.engine)
をインポートする誰もが持っていますどのようにこの問題を解決するアイデア?
例外はどこに発生しますか? – driax
ForeignKey制約の定義方法を確認できますか? また、このコードはすべて1つのファイルに含まれていれば動作しますか? (コースの適切な変更を伴う)? – driax
エラーは、__Table__が__Column__ではなく見つからないことを示しているようです。ここでは推測していますが、__Filer__をモジュールにインポートしてFKを定義し、エラーが変更されたかどうかを確認してください。 – van