相关疑难解决方法(0)

Flask-SQLAlchemy导入/上下文问题

我想构建我的Flask应用程序,例如:

./site.py
./apps/members/__init__.py
./apps/members/models.py
Run Code Online (Sandbox Code Playgroud)

apps.members 是一个Flask蓝图.

现在,为了创建模型类,我需要掌握应用程序,例如:

# apps.members.models
from flask import current_app
from flaskext.sqlalchemy import SQLAlchemy

db = SQLAlchemy(current_app)

class Member(db.Model):
    # fields here
    pass
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将该模型导入我的Blueprint应用程序,我会感到害怕RuntimeError: working outside of request context.我怎样才能正确掌握我的应用程序?相对导入可能有效,但它们非常丑陋且有自己的上下文问题,例如:

from ...site import app

# ValueError: Attempted relative import beyond toplevel package
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy

104
推荐指数
2
解决办法
5万
查看次数

使用Flask-SQLAlchemy在Alembic自动生成迁移时未检测到任何更改

我无法让Alembic使用db.Model(Flask-SQLAlchemy)而不是使用(Flask-SQLAlchemy)自动生成从更改到类的候选迁移Base.

我已修改env.py为创建我的Flask应用程序,导入所有相关模型,初始化数据库,然后运行迁移:

...
uri = 'mysql://user:password@host/dbname?charset=utf8'
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = uri
app.config['SQLALCHEMY_ECHO'] = True
db.init_app(app)
with app.test_request_context():
    target_metadata = db.Model.metadata
    config.set_main_option('sqlalchemy.url', uri)
    if context.is_offline_mode():
        run_migrations_offline()
    else:
        run_migrations_online()
...
Run Code Online (Sandbox Code Playgroud)

这种方法工作正常drop_all(),create_all()(例如,重新创建单元测试的测试分贝时),但似乎在这种情况下落空.自动生成的版本脚本始终具有空的升级和降级方法,例如,

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    pass
    ### end Alembic commands ###


def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    pass
    ### end Alembic commands ###
Run Code Online (Sandbox Code Playgroud)

我的更改包括重命名列,更改列定义等 …

sqlalchemy database-migration flask flask-sqlalchemy alembic

20
推荐指数
3
解决办法
1万
查看次数

Alembic - 自发生成空迁移

我试图Alembic第一次使用,并希望使用此处--autogenerate描述的功能

我的项目结构看起来像

project/
       configuration/
                    __init__.py
                    dev.py
                    test.py
       core/
           app/
              models/
                    __init__.py
                    user.py
       db/
          alembic/
                  versions/
                  env.py
          alembic.ini
Run Code Online (Sandbox Code Playgroud)

我使用Flask,并SQLAlchemy和他们的Flask-SQLAlchemy扩展.我的模特User看起来像

class User(UserMixin, db.Model):
    __tablename__ = 'users'
    # noinspection PyShadowingBuiltins
    uuid = Column('uuid', GUID(), default=uuid.uuid4, primary_key=True,
                  unique=True)
    email = Column('email', String, nullable=False, unique=True)
    _password = Column('password', String, nullable=False)
    created_on = Column('created_on', sa.types.DateTime(timezone=True),
                        default=datetime.utcnow())
    last_login = Column('last_login', sa.types.DateTime(timezone=True),
                        onupdate=datetime.utcnow())
Run Code Online (Sandbox Code Playgroud)

如上所述这里,我修改env.py的样子

from configuration import app

alembic_config = config.get_section(config.config_ini_section) …
Run Code Online (Sandbox Code Playgroud)

python migration flask flask-sqlalchemy alembic

19
推荐指数
5
解决办法
2万
查看次数