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()
代码如上,通过命令行依次运行
python manage.py db init
python manage.py db migrate
python manage.py db upgrade
无报错并成功生成版本文件和数据库表单
但是在不做任何修改再一次运行python manage.py db migrate
后报错:
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
刚开始学flask框架,在做一个项目练习,完全搜不到相关报错的解决方法,各位请多指教,谢谢!
删除你的 migration/ 文件夹,重新执行试试。