#python #flask #flask-sqlalchemy
#python #flask #flask-sqlalchemy
Вопрос:
Я работаю над новым проектом, который уже разработан в Flask, и я ничего не знаю о Flask. Моя компания предоставила мне проект, потому что у меня есть опыт работы с Django.
Это структура проекта:
models
-db.py
-model1.py
-model2.py
- ..
static
- ..
templates
- ..
myapp.py
myapp.py
содержит все файлы конфигурации и код инициализации сервера со всеми другими функциями, такими как домашняя страница и страница регистрации.
Когда я запускаю myapp.py
, он работает нормально, но таблицы не создаются автоматически (я обнаружил, что необходимо выполнить первую миграцию). Я понятия не имею, как это сделать.
В проекте используются модули postgresql и SQLAlchemy из flask_sqlalchemy.
db.py
файл:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
Все модели имеют from db import db
myapp
файл:
# ===================================================================
# SQL ALCHEMY
# ===================================================================
if (SERVER_MODE == RUN_MODE.PRODUCTION):
app.config['SQLALCHEMY_DATABASE_URI'] = (
os.environ["DATABASE_URL"]
)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
else:
app.config['SQLALCHEMY_DATABASE_URI'] = (
'postgresql://'
'creathiveswebapp:creathives'
'@'
'localhost/cl_creathives_pgdb'
)
app.config['SQLALCHEMY_ECHO'] = False
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db.init_app(app)
и
...
# ===================================================================
# START SERVER
# ===================================================================
if __name__ == "__main__":
port = int(os.environ.get('PORT', 5000))
if (SERVER_MODE == RUN_MODE.PRODUCTION):
# TODO: Turn off debug
app.run(host='0.0.0.0', port=port, debug=True)
else:
app.run(host='0.0.0.0')
Как мне выполнить первую миграцию для создания таблиц.
Ответ №1:
Используйте эту команду :
python manage.py db migrate
А для настроек миграции базы данных попробуйте что-то вроде этого :
import os
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
from app import app, db
app.config.from_object(os.environ['APP_SETTINGS'])
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
Для получения дополнительных знаний читайте здесь.
Комментарии:
1. Привет, Пракхар, спасибо за ответ. Я реализовал код, но при запуске «python manage.py перенос базы данных» вызывает «Файл «migrations/env.py «, строка 23, в <module> target_metadata = current_app.extensions[‘migrate’].db.ошибка атрибута метаданных: у объекта ‘module’ нет атрибута ‘metadata'» можете ли вы помочь мне сэто.
Ответ №2:
import os
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
from app import app, db
app.config.from_object(os.environ['APP_SETTINGS'])
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
app.run()
Используйте команду:
flask db migrate -m ‘comments’
обновление flask db