- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试让 sqlalchemy-continuum 与 flask-sqlalchemy 和 flask-migrate 一起工作。我的 __init__.py
文件如下所示:
import os
from flask import Flask
def create_app():
"""Create and configure an instance of the Flask application."""
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(
SQLALCHEMY_DATABASE_URI='postgres+psycopg2://{}:{}@{}:{}/{}'.format(
os.environ['POSTGRES_USER'],
os.environ['POSTGRES_PASSWORD'],
os.environ['POSTGRES_HOST'],
os.environ['POSTGRES_PORT'],
os.environ['POSTGRES_DB']
),
SQLALCHEMY_TRACK_MODIFICATIONS=False
)
try:
os.makedirs(app.instance_path)
except OSError:
pass
from .models import db, migrate
db.init_app(app)
migrate.init_app(app, db)
return app
我的 models.py 文件如下所示:
import sqlalchemy
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from sqlalchemy_continuum import make_versioned
db = SQLAlchemy()
migrate = Migrate()
make_versioned(user_cls=None)
class User(db.Model):
__versioned__ = {}
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(20), unique=True, nullable=False)
def __repr__(self):
return '<User {} - {}>'.format(self.username, self.email)
sqlalchemy.orm.configure_mappers()
然后我运行以下 flask-migrate 命令来初始化和迁移数据库:
flask db init
flask db migrate
flask db upgrade
flask db upgrade 命令的输出似乎显示了正在创建的正确表:
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'transaction'
INFO [alembic.autogenerate.compare] Detected added table 'user'
INFO [alembic.autogenerate.compare] Detected added table 'user_version'
INFO [alembic.autogenerate.compare] Detected added index 'ix_user_version_end_transaction_id' on '['end_transaction_id']'
INFO [alembic.autogenerate.compare] Detected added index 'ix_user_version_operation_type' on '['operation_type']'
INFO [alembic.autogenerate.compare] Detected added index 'ix_user_version_transaction_id' on '['transaction_id']'
在 python shell 中,我可以执行以下操作:
>>> from test_flask.__init__ import create_app
>>> from test_flask.models import db, User
>>> app = create_app()
>>> with app.app_context():
... user = User(username='devuser', email='devuser@gmail.com',
password='devpassword')
... db.session.add(user)
... db.session.commit()
这似乎工作正常,但是当我尝试使用以下方法访问 versions 属性中的元素时:
>>> user.versions[0]
我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/dynamic.py", line 254, in __getitem__
attributes.PASSIVE_NO_INITIALIZE).indexed(index)
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/dynamic.py", line 359, in indexed
return list(self.added_items)[index]
IndexError: list index out of range
命令:
>>> user.versions
返回:
<sqlalchemy.orm.dynamic.AppenderQuery object at 0x7f6515d3a898>
这似乎不是版本属性的预期行为,如 sqlalchemy-continuum docs 中指定的那样.关于我做错了什么有什么想法吗?
最佳答案
此错误可能在两种情况下发生,至少:
UPDATE
或INSERT
之后没有提交app
上下文中在你的 flask shell 示例中,所有语句都应该在上下文 block 中:
>>> with app.app_context():
... user = User(username='devuser2', email='devuser2@gmail.com', password='devpassword2')
... db.session.add(user)
... db.session.commit()
... user.versions[0].username
... user.username='devuser_fixed'
... db.session.commit()
... user.versions[1].username
#'devuser'
#'devuser_fixed'
在上下文之外,user
仍然存在,变量保留在内存中,但是连接到数据库的 session 丢失了。
注意:如果缺少第二次提交,user.versions[1]
将仅在实际上下文 session 中可用。因此,如果您退出此上下文并检查 user.versions[1]
,您将面临同样的错误。
关于python - 将 sqlalchemy-continuum 与 flask-sqlalchemy 和 flask-migrate 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51065521/
谁能向我解释企业连续体、架构存储库和架构内容框架根据 TOGAF 框架的区别? 最佳答案 架构内容框架 (使用 内容元模型 )告知在 的哪个阶段生成什么内容ADM 循环,并且还提供了一个模型来构建这些
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
直到最近一个项目需要它时,我才尝试将 Continuum 作为构建服务器。我很欣赏与 Maven 构建的集成,但是我一直无法找到让 Continuum 在每次 Subversion 提交(如 Crui
我已经按照安装 archiva ( detailed description ) 的相同方式在我的 tomcat 上部署了 Apache continuum。 webapp 正在运行,但有一个问题我没
我是 this app 的开发者这只是一个网站的包装。它似乎很受欢迎,而且有很多人问我是否可以将它也用于 W10M,以便他们可以在 Continuum 上使用它。 我对此没有任何反对意见,我现在可以打
我正在使用: SQLAlchemy==1.0.8 sqlalchemy-continuum===1.2.1 sqlalchemy-utils==0.31.0 后端是 PG 9.3。对于以下定义,Con
我试图理解 TOGAF 9 的核心概念。 无论我多长时间阅读 TOGAF 手册中的解释,我都无法理解 Enterprise Continuum 和 Architecture Repository 之间
我已经尝试解决这个问题有一段时间了,但仍然无法实现这种集成。我可能在这里遗漏了一些非常简单的东西,并且一路上感到困惑! 首先,我如何在 github 上成功托管 Maven 项目,以便当我运行命令 m
如何安装blaze在 Python 中本地(即不在虚拟环境中)?我找到的唯一说明在包的文档中(参见链接)和 here , 在虚拟环境中。 最佳答案 我没有在网上找到任何关于此的说明,但它相对简单。 关
我的 Windows 10 PC 上有一个 Anaconda 2.3 的工作版本。 (我使用 PowerShell 作为我的首选命令行界面。) 更新到 Anaconda 2.4 后,使用 conda
我正在寻找合适的持续集成工具。 我们有 Java 和 Java EE 项目。 部分项目是 Maven 项目 我们使用 Subversion/SVN 一些项目有很多模块 我进行了一些搜索,发现了推荐的这
我正在尝试让 sqlalchemy-continuum 与 flask-sqlalchemy 和 flask-migrate 一起工作。我的 __init__.py 文件如下所示: import os
我需要安装 Tensorflow 并尝试先添加环境。但是我收到 HTTP Connection Failed 错误。我支持公司代理,并且已经在 .condarc 文件中很好地定义了它们。这是我得到的错
我是一名优秀的程序员,十分优秀!