Как создавать таблицы с SQLAlchemy ORM? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать 3 таблицы с SQLAlchemy декларативно, как описано здесь http://flask.pocoo.org/docs/1.0/patterns/sqlalchemy/. Однако, когда я запускаю свой модуль database.py, таблицы на самом деле никогда не создаются.Может ли кто-нибудь указать мне правильное руководство о том, что я делаю неправильно?

# database.py
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine(os.environ.get('DATABASE_URL'), echo=True, 
convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
                                    autoflush=True,
                                     bind=engine))

Base = declarative_base()
Base.query = db_session.query_property()

def init_db():
    import models
    Base.metadata.create_all(bind=engine)

if __name__ == '__main__':
    init_db()here

Внутри файла models.py я определяю свои модели для создания таблиц.Когда я запускаю database.py, я получаю вывод

$ python database.py
2018-12-05 16:26:37,551 INFO sqlalchemy.engine.base.Engine select version()
2018-12-05 16:26:37,552 INFO sqlalchemy.engine.base.Engine {}
2018-12-05 16:26:38,072 INFO sqlalchemy.engine.base.Engine select 
current_schema()
2018-12-05 16:26:38,072 INFO sqlalchemy.engine.base.Engine {}
2018-12-05 16:26:38,597 INFO sqlalchemy.engine.base.Engine SELECT CAST('test 
plain returns' AS VARCHAR(60)) AS anon_1
2018-12-05 16:26:38,597 INFO sqlalchemy.engine.base.Engine {}
2018-12-05 16:26:38,863 INFO sqlalchemy.engine.base.Engine SELECT CAST('test 
unicode returns' AS VARCHAR(60)) AS anon_1
2018-12-05 16:26:38,863 INFO sqlalchemy.engine.base.Engine {}
2018-12-05 16:26:39,383 INFO sqlalchemy.engine.base.Engine show 
standard_conforming_strings
2018-12-05 16:26:39,383 INFO sqlalchemy.engine.base.Engine {}

Как вы можете видеть, никакие фактические команды SQL не выдаются для создания таблиц, и я в растерянности относительно того, что я делаю неправильно.У кого-нибудь есть идеи относительно того, почему таблицы не создаются?

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы запускаете приложение, используя flask run в командной строке, __name__ == '__main__' имеет значение False.Поэтому удалите этот оператор if, и ваша база данных должна быть инициализирована.

Кроме того, вы можете попробовать from models import Base вместо просто import models.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...