gpt4 book ai didi

python-3.x - Flask迁移,首次迁移时未检测到对架构的更改

转载 作者:行者123 更新时间:2023-12-03 16:00:43 25 4
gpt4 key购买 nike

我将Flask与Flask-SQLAlchemy和Flask-Migrate一起使用来创建应用程序,但是当我尝试创建迁移时却什么也没有发生。

我在app/models.py中创建了两个表:

from flask import current_app
from . import db

class Student(db.Model):
__tablename__ = 'students'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, nullable=False)
password_hash = db.Column(db.String(128))

def __init__(self, **kwargs):
super(Student, self).__init__(**kwargs)

def __repr__(self):
return '<Tutor {}>' % self.id

class Tutor(db.Model):
__tablename__ = 'tutors'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
password_hash = db.Column(db.String(128))

def __init__(self, **kwargs):
super(Tutor, self).__init__(**kwargs)
def __repr__(self):
return '<Student %r>' % self.id


然后,我也有 app/__init__.py并包含以下代码:

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

#from .models import User, Task, Project, UserProject

from config import config

bootstrap = Bootstrap()
db = SQLAlchemy()
migrate = Migrate()

def create_app(config_name='default'):
#print config_name.name
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)

bootstrap.init_app(app)
db.init_app(app)
migrate.init_app(app, db)

## Register the main blueprint for main app functionality
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)

return app


app.py

import os
from app import create_app, db
from app.models import Tutor, Student

app = create_app('default')

@app.shell_context_processor
def make_shell_context():
return dict(db=db, Tutor=Tutor, Student=Student)


我可以毫无问题地运行 flask db init,它会创建以下目录的迁移目录和所有必需的文件:

Creating directory /Users/Jasmine/projects/flask/flask-tutoring/migrations ... done
Creating directory /Users/Jasmine/projects/flask/flask-tutoring/migrations/versions ... done
Generating /Users/Jasmine/projects/flask/flask-tutoring/migrations/script.py.mako ... done
Generating /Users/Jasmine/projects/flask/flask-tutoring/migrations/env.py ... done
Generating /Users/Jasmine/projects/flask/flask-tutoring/migrations/README ... done
Generating /Users/Jasmine/projects/flask/flask-tutoring/migrations/alembic.ini ... done
Please edit configuration/connection/logging settings in '/Users/Jasmine/projects/flask/flask-tutoring/migrations/alembic.ini' before proceeding.


但是当我尝试运行 flask db migrate时,alembic无法检测到我在 app/models.py中有表。我得到以下输出:

INFO  [alembic.runtime.migration] Context impl SQLiteImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.env] No changes in schema detected.


没有创建迁移脚本,就像 models.py不存在一样。

抱歉,这是一个重复的问题,但是我找不到另一个示例,该示例的第一个迁移失败并且完全没有创建迁移脚本。

我试过通过在外壳中运行 db.drop_all()在某处是否已经创建了表,但这似乎不是问题。

更新

我想出了一种自行解决此问题的方法,但想更好地了解它为何起作用。

我将 app.py重命名为 flasktutor.py,然后重新运行 export FLASK_APP='flasktutor.py'。随后,迁移工作完美。

请有人可以解释为什么当文件被称为 app.py时,我使用了 export FLASK_APP='app.py'时迁移没有注册对模式的更改。

最佳答案

请确保在migrate.init_app(app, db)之前已经导入了模型(教师,学生等)。

关于python-3.x - Flask迁移,首次迁移时未检测到对架构的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com