鍍金池/ 問(wèn)答/Python  數(shù)據(jù)庫(kù)/ 用flask-migrate再第一次upgrade以后,再次migrate報(bào)錯(cuò)?

用flask-migrate再第一次upgrade以后,再次migrate報(bào)錯(cuò)?

db_demo3.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config

app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)

db.create_all()

@app.route('/')
def index():
    return 'hello world'
   
if __name__ == '__main__':
    app.run(debug=True)

models.py

from db_demo3 import db

class Users(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=True)
    telephone = db.Column(db.String(11))

manage.py

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from db_demo3 import app, db
from models import Users

manager = Manager(app)

migrate = Migrate(app, db)

manager.add_command('db', MigrateCommand)

if __name__ == "__main__":
    manager.run()

代碼如上,通過(guò)命令行依次運(yùn)行

python manage.py db init
python manage.py db migrate
python manage.py db upgrade

無(wú)報(bào)錯(cuò)并成功生成版本文件和數(shù)據(jù)庫(kù)表單
但是在不做任何修改再一次運(yùn)行python manage.py db migrate后報(bào)錯(cuò):

C:\Users\LKS00085\Python\learn flask\db_demo3>python manage.py db migrate
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
Traceback (most recent call last):
  File "D:\Anaconda3\lib\site-packages\alembic\script\revision.py", line 348, in
 _revision_for_ident
    revision = self._revision_map[resolved_id]
KeyError: 51

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    manager.run()
  File "D:\Anaconda3\lib\site-packages\flask_script\__init__.py", line 417, in r
un
    result = self.handle(argv[0], argv[1:])
  File "D:\Anaconda3\lib\site-packages\flask_script\__init__.py", line 386, in h
andle
    res = handle(*args, **config)
  File "D:\Anaconda3\lib\site-packages\flask_script\commands.py", line 216, in _
_call__
    return self.run(*args, **kwargs)
  File "D:\Anaconda3\lib\site-packages\flask_migrate\__init__.py", line 197, in
migrate
    version_path=version_path, rev_id=rev_id)
  File "D:\Anaconda3\lib\site-packages\alembic\command.py", line 117, in revisio
n
    script_directory.run_env()
  File "D:\Anaconda3\lib\site-packages\alembic\script\base.py", line 416, in run
_env
    util.load_python_file(self.dir, 'env.py')
  File "D:\Anaconda3\lib\site-packages\alembic\util\pyfiles.py", line 93, in loa
d_python_file
    module = load_module_py(module_id, path)
  File "D:\Anaconda3\lib\site-packages\alembic\util\compat.py", line 68, in load
_module_py
    module_id, path).load_module(module_id)
  File "<frozen importlib._bootstrap_external>", line 399, in _check_name_wrappe
r
  File "<frozen importlib._bootstrap_external>", line 823, in load_module
  File "<frozen importlib._bootstrap_external>", line 682, in load_module
  File "<frozen importlib._bootstrap>", line 251, in _load_module_shim
  File "<frozen importlib._bootstrap>", line 675, in _load
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "migrations\env.py", line 87, in <module>
    run_migrations_online()
  File "migrations\env.py", line 80, in run_migrations_online
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "D:\Anaconda3\lib\site-packages\alembic\runtime\environment.py", line 807
, in run_migrations
    self.get_context().run_migrations(**kw)
  File "D:\Anaconda3\lib\site-packages\alembic\runtime\migration.py", line 312,
in run_migrations
    for step in self._migrations_fn(heads, self):
  File "D:\Anaconda3\lib\site-packages\alembic\command.py", line 97, in retrieve
_migrations
    revision_context.run_autogenerate(rev, context)
  File "D:\Anaconda3\lib\site-packages\alembic\autogenerate\api.py", line 369, i
n run_autogenerate
    self._run_environment(rev, migration_context, True)
  File "D:\Anaconda3\lib\site-packages\alembic\autogenerate\api.py", line 379, i
n _run_environment
    if set(self.script_directory.get_revisions(rev)) != \
  File "D:\Anaconda3\lib\site-packages\alembic\script\base.py", line 201, in get
_revisions
    return self.revision_map.get_revisions(id_)
  File "D:\Anaconda3\lib\site-packages\alembic\script\revision.py", line 298, in
 get_revisions
    return sum([self.get_revisions(id_elem) for id_elem in id_], ())
  File "D:\Anaconda3\lib\site-packages\alembic\script\revision.py", line 298, in
 <listcomp>
    return sum([self.get_revisions(id_elem) for id_elem in id_], ())
  File "D:\Anaconda3\lib\site-packages\alembic\script\revision.py", line 303, in
 get_revisions
    for rev_id in resolved_id)
  File "D:\Anaconda3\lib\site-packages\alembic\script\revision.py", line 303, in
 <genexpr>
    for rev_id in resolved_id)
  File "D:\Anaconda3\lib\site-packages\alembic\script\revision.py", line 351, in
 _revision_for_ident
    revs = [x for x in self._revision_map
  File "D:\Anaconda3\lib\site-packages\alembic\script\revision.py", line 352, in
 <listcomp>
    if x and x.startswith(resolved_id)]
TypeError: <flask_script.commands.Command object at 0x0000000004E44E80>: startsw
ith first arg must be str or a tuple of str, not int

剛開(kāi)始學(xué)flask框架,在做一個(gè)項(xiàng)目練習(xí),完全搜不到相關(guān)報(bào)錯(cuò)的解決方法,各位請(qǐng)多指教,謝謝!

回答
編輯回答
避風(fēng)港

刪除你的 migration/ 文件夾,重新執(zhí)行試試。

2017年1月11日 11:43