Не удается создать базу данных с помощью SQLalchemy, возможно, Flask не выполняет мой основной метод? - PullRequest
0 голосов
/ 25 мая 2020

Я следил за учебником FLask / SQLalchemy во время выступления python, но я не могу заставить SQLalchemy создать свою базу данных SQLite.

В данный момент я сомневаюсь, что он запускает основной метод вообще, int для отладки терминала установлено значение 0, и оператор печати из main () никогда не печатается.

Я действительно не знаю, что я делал неправильно, сайт обедает, и я могу просматривать это, но файл SQLite никогда не создается в папке db.

app.py:

import os
import flask
import data.db_session as db_session

app = flask.Flask(__name__)


def main():
    print("print this if coming from main()")
    setup_db()
    app.run(debug=True)


def setup_db():
    db_file = os.path.join(
        os.path.dirname(__file__),
        'db',
        'database.sqlite')

    db_session.global_init(db_file)


@app.route('/')
def frontpage():
    return flask.render_template('index.html')


if __name__ == '__main__':
    main()

db_session.py:

import sqlalchemy as sa
import sqlalchemy.orm as orm

from data.modelbase import SqlAlchemyBase

factory = None


def global_init(db_file: str):
    global factory

    if factory:
        return

    if not db_file or not db_file.strip():
        raise Exception("You must specify a db file.")

    conn_str = 'sqlite:///' + db_file.strip()
    print("Connecting to DB with {}".format(conn_str))

    engine = sa.create_engine(conn_str, echo=False, connect_args={"check_same_thread": False})
    factory = orm.sessionmaker(bind=engine)

    # noinspection PyUnresolvedReferences
    from data.location import Location

    SqlAlchemyBase.metadata.create_all(engine)

Вывод на терминал:

FLASK_APP = app.py
FLASK_ENV = development
FLASK_DEBUG = 0
In folder C:/Users/******/OneDrive/*********
"C:\Users\****\Anaconda3\envs\********\python.exe" -m flask run
 * Serving Flask app "app.py"
 * Environment: development
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

1 Ответ

0 голосов
/ 25 мая 2020

Чтобы вызвать ваш основной метод, вы можете запустить приложение из командной строки следующим образом:

"C:\Users\****\Anaconda3\envs\********\python.exe" app.py

При этом ваш оператор if __name__=="__main__" будет оценивать как True и вызывать ваш main() function.

Вот полезный, актуальный, но гораздо более длинный ответ, который относится к этому , в котором объясняются некоторые сложности с использованием этого метода для запуска вашего приложения.

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