Python “迁移”;无章节:';alembic'&引用;关于;“数据库迁移”;命令
我正在使用Flask Migrate,并试图使用db Migrate命令向数据库中添加一列。以下是设置:Python “迁移”;无章节:';alembic'&引用;关于;“数据库迁移”;命令,python,flask,flask-sqlalchemy,alembic,flask-migrate,Python,Flask,Flask Sqlalchemy,Alembic,Flask Migrate,我正在使用Flask Migrate,并试图使用db Migrate命令向数据库中添加一列。以下是设置: from flask import Flask, render_template, request, session, flash, redirect, url_for from flask.ext.babel import Babel from flask.ext.mail import Mail from flask.ext.script import Manager from flas
from flask import Flask, render_template, request, session, flash, redirect, url_for
from flask.ext.babel import Babel
from flask.ext.mail import Mail
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.security import Security, SQLAlchemyUserDatastore, \
UserMixin, RoleMixin, login_required, roles_required
from flask.ext.login import current_user
from forms import UserEditForm
import os, sys, datetime, random, math
basedir = os.path.abspath(os.path.dirname(__file__))
# Create app
application = Flask(__name__)
application.config['DEBUG'] = True
application.config['SECRET_KEY'] = 'super-secret'
application.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'app.db')
application.config['DEFAULT_MAIL_SENDER'] = 'info@site.com'
application.config['SECURITY_REGISTERABLE'] = True
application.config['SECURITY_CONFIRMABLE'] = True
application.config['SECURITY_RECOVERABLE'] = True
application.config.from_object('config.email')
application.config['DBPATH'] = os.path.join(basedir, 'app.db')
# Setup mail extension
mail = Mail(application)
# Setup babel
babel = Babel(application)
@babel.localeselector
def get_locale():
override = request.args.get('lang')
if override:
session['lang'] = override
rv = session.get('lang', 'en')
return rv
# Create database connection object
db = SQLAlchemy(application)
migrate = Migrate(application, db)
manager = Manager(application)
manager.add_command('db', MigrateCommand)
# Define models
roles_users = db.Table('roles_users',
db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80), unique=True)
description = db.Column(db.String(255))
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
active = db.Column(db.Boolean())
confirmed_at = db.Column(db.DateTime())
nickname = db.Column(db.String(255))
favcolor = db.Column(db.String(255))
favshape = db.Column(db.String(255))
favflower = db.Column(db.String(255))
favband = db.Column(db.String(255)) # <<<--- NEW COLUMN
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
def __str__(self):
return '<User id=%s email=%s>' % (self.id, self.email)
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security = Security(application, user_datastore)
# Views
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
if str(sys.argv[1]) == 'run':
application.run(debug=True) #(host='0.0.0.0', debug=True)
else:
manager.run()
我也曾在flask\Scripts
中尝试过这一点,但得到了相同的错误:
python.exe.././application.py db migrate
我还尝试将flask迁移到最新版本。以防将来有人遇到此问题--
我没有migrations文件夹,因为我从另一个项目传输了DB文件。所以,当您没有正常运行的迁移文件夹时,就会发生这种情况 我也有这个问题。我的migrations文件夹位于与预期不同的文件夹中。通常,您只需执行以下操作,即可找到相应的目录:
migrate = Migrate(app, db, directory="/path/to/migrations_folder")
但是,如果实例化迁移对象,然后稍后使用db和应用程序进行初始化,则该对象将不起作用:
# This won't work
migrate = Migrate(directory='/path/to/migrations_folder')
migrate.init_app(app, db)
init_app
将目录重写回默认目录。因此,您需要始终在init\u应用程序
调用中传递目录
# This will
migrate = Migrate()
migrate.init_app(app, db, directory='/path/to/migrations_folder')
编辑我提交了一个你有alembic.ini文件吗?
# This will
migrate = Migrate()
migrate.init_app(app, db, directory='/path/to/migrations_folder')