Flask SQL Alchemy create_all не создает никаких таблиц

Я работал над своим школьным проектом, который требовал от меня разработки API на Flask. Я использовал MySQL с Flask SQLAlchemy. После того, как я закончил проект, я не прикасался к нему месяц. Когда я вернулся и попытался запустить его, я обнаружил, что он не создает таблицы сам по себе.

Что я проверил:

  • Пользователь MySQL имеет все разрешения
  • Приложение подключается к базе данных
  • Каждая модель имеет определенное имя таблицы

app.py файл:

import logging
from os import environ

from flask import Flask
from flask_cors import CORS
from flask_restful import Api
from flask_sqlalchemy import SQLAlchemy

from config import DevConfig, ProdConfig

db = SQLAlchemy()


def create_app():
    from resources import Area, Map, Ping, SensorData

    env = environ.get('ENVIRONMENT')
    if env == 'DEVELOPMENT':
        Config = DevConfig
    else:
        Config = ProdConfig

    app = Flask(__name__)
    app.config.from_object(Config())
    CORS(app)
    logging.basicConfig(
        filename='app.log',
        level=logging.INFO
    )

    api = Api(app)
    api.add_resource(Area, '/area')
    api.add_resource(Map, '/map')
    api.add_resource(SensorData, '/api/v1/saveSensorData')
    api.add_resource(Ping, '/ping')

    db.init_app(app)

    with app.app_context():
        from models import AreaModel, SensorDataModel
        db.create_all()

    return app


if __name__ == '__main__':
    app = create_app()
    app.run(host='0.0.0.0', port=8080)

Одна из моделей:

from app import db
from datetime import datetime


class AreaModel(db.Model):
    __tablename__ = 'area_records'

    id = db.Column(
        db.Integer,
        primary_key=True
    )
    aqi = db.Column(
        db.Integer,
    )
    latitude = db.Column(
        db.String(16),
    )
    longitude = db.Column(
        db.String(16),
    )
    created = db.Column(
        db.DateTime,
        default=datetime.now()
    )

Вы не привели пример таблицы. Эти классы наследуются от db.Model?

roganjosh 19.12.2020 12:20

@roganjosh Я обновил пост с одной из моделей

andrewyazura 19.12.2020 12:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
135
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел решение, но не ответ. По какой-то причине, когда я запускаю app.py напрямую, используя python app.py, он не создает никаких таблиц. Но когда я создал run.py с помощью этого кода:

from app import create_app

app = create_app()

app.run(host='0.0.0.0', port=8080)

Это сработало! Я надеюсь, что кто-то может объяснить это, но я очень рад, что нашел решение.

Другие вопросы по теме