【问题标题】:how to create 'view migration' script using alembic tool如何使用 alembic 工具创建“视图迁移”脚本
【发布时间】:2012-10-08 04:38:57
【问题描述】:

有人知道如何使用 create_view 函数来使用 alembic 升级函数创建视图吗? 例如,我们有:

CREATE VIEW myview AS
SELECT column_name(s)
FROM table_name
 WHERE condition

现在我们要在 alembic 升级函数脚本中定义一个视图来创建“myview”。如何实现?

谢谢。

【问题讨论】:

  • 如果 alembic 不提供创建/删除视图的功能,您可以随时使用 '''op.execute''',它会直接执行提供的 SQL。
  • 谢谢。这是非常有帮助的。我会试试的。

标签: sql sqlalchemy alembic


【解决方案1】:

我知道,这个问题太老了,当时可能不存在这种可能性。然而,对于现在提出这个问题的所有人来说:cookbook 中描述了一种可能性。

它通过为您提供op.create_viewop.drop_viewop.replace_view(myview, replaces="3f2ab897a.myview") 等附加操作来利用对象(如视图和存储过程)的创建、删除和替换。存储过程也是如此,也可以扩展为例如用户定义的函数。

视图定义如下:

myview = ReplaceableObject('myview',
    """
    SELECT * FROM mytable
    """
)

当然,所有这些也可以通过简单的op.execute 语句来完成,但是在这种情况下,alembic 会处理DROP VIEWCREATE VIEWALTER VIEW 命令。

【讨论】:

  • 将食谱代码放在文件“foo”中并在 env.py 中包含“from migrations.foo import *”对大多数人来说可能很明显,但对我来说不是。显式导入可能更好,但是¯\_(ツ)_/¯。
  • @frogg :这可能不包含在食谱中(我的回答中也没有),因为它在很大程度上取决于您如何构建项目。例如。在我的情况下,我在包migrations.helper 中定义了ReplaceableObject,并且我将它导入到模板migrations/script.py.mako 中,以便在每个(生成的)修订版中都可以使用它。在某些项目中,我直接将其导入生成的修订版中。但是感谢您的澄清,这有助于确定代码的位置。
猜你喜欢
  • 2013-10-06
  • 2020-04-20
  • 2018-09-09
  • 2021-11-08
  • 2019-03-20
  • 2014-08-24
  • 1970-01-01
  • 2020-05-29
  • 2013-10-20
相关资源
最近更新 更多