私はデータベースに永続化するいくつかのクラスを作成しました。特定のフラグを使ってアプリケーションを実行して、すべてのクラスを取得して、対応するテーブルをデータベースに作成したいと考えています。そのために、クラスをインポートしてからBase.metadata.create_all(engine)
メソッドを呼び出そうとしています。しかし、それは動作しません。同時に、実際のクラスのそれぞれをファイルから呼び出すと、テーブルが作成されます。SQLAlchemy、Declarative、PostgreSQL:テーブルを作成できません
これらのテーブルを作成するにはどうすればよいですか? 1つのファイル/スクリプトからそれらを作成するか、そのクラスをそれぞれのクラスに追加する必要がありますか?輸入品の奇妙な順序のための
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
def main():
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('postgresql+psycopg2://me:[email protected]/my_first_database', echo=True)
from Item import Item
print(Item)
print(Item.__table__)
Base.metadata.create_all(engine)
main()
申し訳
1)Item.py
from sqlalchemy import Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Item(Base):
__tablename__ = "items"
id = Column(Integer, primary_key=True)
name = Column(String)
def __repr__(self):
return "<~ {} ~> name: {}".format(self.id, self.name)
2)main.pyが、私:ここ
は、私のコードの例です。あなたの授業や授業の読み込みの順序がどこかに読んでいたので、私はそれについて試してみました。あなたは既にItem.py
で
Base
を作成し
私が見つけたことの一つは、 'import item'と' Item .__ base __。metadata.create_all(engine) 'のすべてが動作するということです。しかし、それは少し汚れたハックのように見えます。私はそれを作るたびにBaseが同じであると思った。 – Ibolit