Я следую интерактивному учебнику Flask и застреваю в точке, когда вы выполняете первую миграцию базы данных.По команде
$ flask db migrate
я получаю сообщение об ошибке
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError)
(1045, "Access denied for user 'counter_app'@'localhost' (using password: NO)")
(Background on this error at: http://sqlalche.me/e/e3q8)
К сожалению, ссылка в сообщении об ошибке не дает адекватной помощи, но я почти уверен, что знаю, в чем проблемаявляется.С помощью этой команды я пытаюсь подключиться к базе данных без использования пароля («используя пароль: НЕТ»), однако для данного пользователя counter_app в файле .flaskenv установлен пароль, например:
FLASK_APP='manage.py'
FLASK_ENV=development
SECRET_KEY='my_secret_key'
DB_HOST=localhost
DB_USERNAME='counter_app'
DB_PASSWORD='mypassword'
DATABASE_NAME='counter'
Файл appklication.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# setup db
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
# Load config
app.config.from_pyfile('settings.py')
# initialize db
db.init_app(app)
migrate = Migrate(app, db)
# import blueprints
from counter.views import counter_app
# register blueprints
app.register_blueprint(counter_app)
return app
затем загружается через app.config.from_pyfile ('settings.py');settings.py выглядит следующим образом:
import os
SECRET_KEY = os.getenv('SECRET_KEY')
DB_USERNAME=os.environ['DB_USERNAME']
DB_PASSWORD=os.environ['DB_PASSWORD']
DB_HOST=os.environ['DB_HOST']
DATABASE_NAME=os.environ['DATABASE_NAME']
DB_URI = 'mysql+pymysql://%s:%s@%s:3306/%s' % (DB_USERNAME, DB_PASSWORD, DB_HOST, DATABASE_NAME)
SQLALCHEMY_DATABASE_URI = DB_URI
Если это сработало должным образом, эта последовательность должна установить DB_USERNAME, что она делает, но также должна установить DB_PASSWORD, чего нет.Таким образом, проблема заключается в том, что команда flask не получает информацию о том, что она должна прочитать информацию в файле .flaskenv и затем использовать пароль при переносе базы данных.Когда я даю команду, я нахожусь в том же каталоге, что и файл .flaskenv.Кроме того, я могу войти в базу данных вручную, поэтому я знаю, что имя пользователя и пароль из файла .flaskenv верны.
Фляга документации по параметру командной строки очень краткая и не дает никаких примеров.о том, как указать пользователя базы данных и пароль.Так как же заставить команду 'flask db migrate' использовать правильного пользователя и пароль?