问题标签 [alembic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Local and heroku db get out of sync while migrating using alembic
I'm bulding an app with Flask and Angular hosted on heroku. I have a problem with migrating heroku postgresql. I'm using flask-migrate which is a tiny wrapper around alembic. Locally everything is fine. I got an exception when I run heroku run upgrade
which runs alembic upgrade command.
Simply, alembic is trying to run from the first migration which creates the db. I tried to set explicitly the proper revision with heroku run python manage.py db upgrade +2
or revision number but the exception is the same.
My guess was that due to ephemeral filesystem of Heroku revision in not stored, but that shouldn't be a problem if I explicitly set the revision, right? :)
How can I set the current head of revision?
Here is relevant code:
Procfile:
models.py
python - Alembic --autogenerate 对我来说失败了
我正在运行的命令:
我得到以下结果:
我真的不确定这里可能出了什么问题。我正在尝试使用 Postgres 9.2、SQLAlchemy 0.8.4 和 Alembic 0.6.1。但是我在 Postgres 9.3、SQLAlchemy 0.9 和 Alembic 0.6.2 上看到了相同的结果。我们正在使用自定义数据库模式,如果这有影响的话。
python - 对多个 Postgres 模式的 Alembic 支持
如何使用 Alembic--autogenerate
迁移SQL Alchemy 模型中未硬编码的多个Postgres 模式?(关于 Postgres Schemas的 SQLAlchemy 支持的镜像问题,但对于 Alembic)。
特别是,我们使用 Postgres 模式来分隔共享同一组表的不同客户端。此外,客户端之间有一个共享内容的模式。SQL Alchemy 模型不了解模式,模式是在运行时使用session.execute("SET search_path TO client1,shared")
.
默认设置--autogenerate
根本没有帮助,因为它会检测模型中不存在的多个模式并最终删除模式并重新创建默认模式中的每个表。
不过,我真的很想使用--autogenerate
正确的管道来正确设置模式。关于 Alembic 的 API 是否/如何做到这一点的任何建议?
python - Alembic 不会在自动生成中添加级联信息?
这是我的Budget
架构
和BudgetCategories
当我生成 alembic 迁移脚本时,我会
我得到
然后我做
我得到
问题
为什么 alembic 没有为 生成语法ON CASCADE DELETE
?我想我错过了一些东西,但不确定是什么?有人可以在这里帮忙吗?
postgresql - Heroku 上的 Alembic / Flask-migrate 迁移运行但不创建表
我正在尝试将 Flask 应用程序部署到 Heroku。我已经推送到 Heroku 并且可以访问我的登录页面,但是对 db 的任何调用都会给出 OperationalError:
使用 Flask-migrate 我可以成功运行本地迁移和升级:
当我尝试使用升级在 Herokuheroku run python manage.py db upgrade
上升级时,似乎发生了,但是 Context impl. 现在是 SQLite?:
运行Heroku pg:info
给出:
Heroku 升级的相关日志为:
另外,heroku config
给我:
上下文实现如何。放?除了在本地工作和 heroku 之间存在明显差异之外,我无法弄清楚发生了什么或应该如何调试。谢谢。
python - Alembic/Flask-migrate 无法识别数据库结构
我有一个基于 Flask 的应用程序,我正在尝试使迁移能够管理数据库结构更改。在我开始使用 alembic 和 flask-migrate 之前,我的数据库不是空的,并且包含表和记录。
首先,我尝试单独使用 alembic,只需pip install alembic然后配置所有内容并使用autogenerate生成差异。一切正常,但输出并不完全符合我的预期:
所以表用户实际上存在于我的数据库中(我认为它是 postgresql 中的保留表)并且我从未删除它。另外,我还有一堆其他的表,这些表似乎对 alembic 是不可见的。起初我以为我没有正确配置 alembic,所以我重新开始并决定尝试Miguel Grinberg 的这个不错的烧瓶扩展。这更容易设置,但结果是完全相同的消息。
任何想法我做错了什么?
编辑:我决定添加一些关于我如何编辑原始 alembic env.py 的重要信息:
在任何迁移开始之前,alembic 必须进行这些更改才能查看我的声明性基础和模型。放弃独立方法后,我只是按照烧瓶迁移教程进行操作,并没有触及那里的任何文件。
编辑:好的,所以我们已经解释了已删除的“用户”表。尽管如此,我的其他模型并没有出现在脚本中。我认为会发生什么,因为在创建迁移脚本之前启动了应用程序,sqlalechmy db.create_all()调用创建了表,这就是为什么 alembic 在列与模型中没有看到任何差异的原因。也许我在错误的地方调用create_all() ?
编辑:是的!就是这样,我将db.create_all() 移到 manager.run()下方,它现在可以正确检测到更改。感谢所有的帮助!
python - 如何在 Alembic 初始化期间使用自定义模板
根据文档,alembic 的模板可以指定为alembic init --template pylons ./scripts
. python_path/lib/python2.7/site-packages/alembic/templates
但 alembic 仅在其根目录 ( )的一个文件夹中搜索模板。
有没有办法运行自定义模板?问题的想法 - 项目设置的自动化,例如避免任何手工更改(如编辑env.py
文件)。
python - 在 heroku 上运行 flask-migrate 会产生错误
我正在尝试使用 flask-migrate 在本地对我的数据库进行版本控制,然后反映生产中的更改(Heroku)。到目前为止,我成功地对本地数据库进行了版本控制并对其进行了升级,所以现在我想在 Heroku 上反映这一点。为此,我将最新的代码状态连同新创建的迁移文件夹和更新的 requirements.txt 一起推送到 Heroku。我看到依赖项已成功安装:
然后,我尝试了:
不幸的是,我得到了这个回应:
我用谷歌搜索这可能是什么,看起来配置文件无法打开,但是我不知道可以做些什么来解决这个问题。为什么这在本地有效,但在 Heroku 上无效?
python - alembic 没有检测到关系表
我已经为 m2m 关系定义了一些带有一些关联表的模型:
runningalembic revision --autogenerate
确实会为继承自的类生成表,db.Model
但不会为用于我的 m2m 关系的表生成表。
我的alembic.ini
和env.py
文件是默认的。我只是导入我的模型初始化我的项目__init__.py
知道什么可能导致这种行为吗?
postgresql - 使用 alembic 调整 Heroku 中 Postres 的字符串列的大小
我想通过 alembic 更改我的 PostgreSQL 数据库中字符串列的大小。
我在本地数据库中的第一次尝试是更直接的方式,也是一种看起来合乎逻辑的方式:
更改我想要调整大小的 db.Column 字段的大小并配置 alembic 以查找类型更改,如此处所述:将compare_type=True
参数添加到context.configure()
my alembic/env.py
. 然后运行alembic revision --autogenerate
其中正确生成的文件调用alter_column
.
这似乎没问题,但是alembic upgrade head
由于我取消了执行并寻找其他解决方案的 alter 列而花费了很多时间,因为我猜如果在我的计算机中花费这么长时间,那么在 Heroku 服务器中也会花费很长时间,我在此操作完成之前,我不会暂停我的服务。
所以我想出了一个在我的机器上完美运行的非常hacky的解决方案:
我在一个用于升级和降级的 alembic 文件中创建了我的更新语句:
在我的机器上工作得非常快。但是当将它推送到我在 Heroku 中的暂存应用程序并执行升级时,它会提示ERROR: permission denied for relation pg_attribute
。如果我尝试直接在 psql 中执行更新语句,也会发生同样的情况。我想这是 Heroku 故意的,我不应该更新这类表,因为如果做错了可能会使数据库出现故障。我猜想在 Heroku 中强制更新不是要走的路。
我还尝试创建一个新的临时列,将旧小列中的所有数据复制到该临时列中,删除旧列,创建一个与旧列同名但具有所需大小的新列,复制临时列中的数据并以这种方式将其删除:
但这也需要很长时间,而且似乎不是一个真正整洁的方法。
所以我的问题是:在 Heroku 中通过 alembic 调整 postgreSQL 中的字符串列大小的正确方法是什么,而无需等待执行 alter 列的时间?