当你调用migrate
命令Flask-Migrate(或实际上在其下的Alembic)时,它将查看你的命令models.py
并将其与数据库中的实际值进行比较。
你的迁移脚本为空的事实表明,你已通过Flask-Migrate无法控制的另一种方法(可能是通过调用Flask-sqlAlchemy的方法)更新了数据库以匹配你的模型db.create_all()
。
如果你的数据库中没有任何有价值的数据,请打开Python Shell
并调用db.drop_all()
以清空它,然后再次尝试自动迁移。
更新:我在这里安装了你的项目,并确认迁移对我来说工作正常:
(venv)[miguel@miguel-linux nhs-listpull]$ ./run.py db init
Creating directory /home/miguel/tmp/mark/nhs-listpull/migrations...done
Creating directory /home/miguel/tmp/mark/nhs-listpull/migrations/versions...done
Generating /home/miguel/tmp/mark/nhs-listpull/migrations/script.py.mako...done
Generating /home/miguel/tmp/mark/nhs-listpull/migrations/env.pyc...done
Generating /home/miguel/tmp/mark/nhs-listpull/migrations/env.py...done
Generating /home/miguel/tmp/mark/nhs-listpull/migrations/README...done
Generating /home/miguel/tmp/mark/nhs-listpull/migrations/alembic.ini...done
Please edit configuration/connection/logging settings in
'/home/miguel/tmp/mark/nhs-listpull/migrations/alembic.ini' before
proceeding.
(venv)[miguel@miguel-linux nhs-listpull]$ ./run.py db migrate
INFO [alembic.migration] Context impl sqliteImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate] Detected added table 'list_type'
INFO [alembic.autogenerate] Detected added table 'job'
Generating /home/miguel/tmp/mark/nhs-
listpull/migrations/versions/48ff3456cfd3_.py...done
尝试重新签出,我认为你的设置正确。
确保将模型导入manage.py
文件(或带有迁移实例的文件)中。即使没有显式使用模型,也必须将模型导入文件中。Alembic需要这些导入来迁移并在数据库中创建表。例如:
# ... some imports ...
from api.models import User, Bucketlist, BucketlistItem # Import the models
app = create_app('dev')
manager = Manager(app)
migrate = Migrate(app, db)
manager.add_command('db', MigrateCommand)
# ... some more code here ...
if __name__ == "__main__":
manager.run()
db.create_all()