SQLAlchemy,Declarative,PostgreSQL:无法创建表

时间:2016-07-05 14:08:23

标签: python postgresql sqlalchemy

我创建了许多我想要保存到数据库的类。我希望能够使用特定标志运行应用程序以获取所有这些类并在我的数据库中创建相应的表。为此,我尝试导入类,然后调用Base.metadata.create_all(engine)方法。但是,这不起作用。同时,当我从文件中调用每个实际类时,会创建表。

如何完成创建这些表的任务?我应该尝试从单个文件/脚本创建它们,还是将该行添加到每个类中?

以下是我的代码示例:

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

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:my_passl@localhost/my_first_database', echo=True)
    from Item import Item
    print(Item)
    print(Item.__table__)
    Base.metadata.create_all(engine)

main()

对于奇怪的导入顺序感到抱歉,但我在某处读到了导入你的类和Base的顺序,所以我试着用它来玩。

1 个答案:

答案 0 :(得分:3)

您已在Base中创建了Item.py,只需将其导入main.py

如果main.pyItem.py位于同一文件夹中,则main.py

from Item import Base, Item

并删除main函数中的所有导入,因此main.py将如下所示:

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from Item import Base, Item

def main():
    engine = create_engine('postgresql+psycopg2://me:my_passl@localhost/my_first_database', echo=True)
    print(Item)
    print(Item.__table__)
    Base.metadata.create_all(engine)

main()