首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将存储过程(PL/PGSQL)发送到环境中,以便由金字塔web应用程序使用?

问如何将存储过程(PL/PGSQL)发送到环境中,以便由金字塔web应用程序使用?
EN

Stack Overflow用户
提问于 2015-06-11 14:57:36
回答 1查看 587关注 0票数 1

我正在开发一个使用金字塔网络应用程序编写的web应用程序。使用MySQL存储关系内容。但是web应用程序也是一种数据存储工具,我们为此使用Postgres。

请注意,每个用户的帐户都在Postgres中获取自己的连接参数。运行Postgres的主机对用户来说不一样。

我们有两个存储过程,这些存储过程对于应用程序的功能是必不可少的。我想知道如何将这些过程传送到每个Postgres数据库实例。我想确保更新它们也是相当容易的。

到目前为止,我能想到的就是这样。

我在应用程序的代码库中有一个名为procedures.sql的文件

代码语言:javascript
复制
CREATE FUNCTION  {procedure_name_1} (text, text,
                      max_split integer) RETURNS text AS $$
BEGIN
-- do stuff --
END;
$$ LANGUAGE plpgsql;

CREATE FUNCTION  {procedure_name_2} (text, text,
                      max_split integer) RETURNS text AS $$
BEGIN
-- do stuff --
END;
$$ LANGUAGE plpgsql;

每当用户想要与他的DB对话时,我都会从python应用程序执行_add_procedures_to_db函数。

代码语言:javascript
复制
procedure_name_map = {
    'procedure_name_1': 'function_1_v1',
    'procedure_name_2': 'function_2_v1'
}

def _add_procedures_to_db(connection):
    cursor = connection.Cursor()

    with open(PROCEDURE_FILE_PATH) as f:
        sql = f.read().format(**procedure_name_map)
        try:
            cursor.execute(sql)
            connection.commit()
        except:
            pass

请注意,当我们想要在MySQL DB的web响应周期内执行某些事务时,将获得连接参数。

策略是将function_1_v1更改为function_1_v2,以防我更新该过程的代码。

但是这似乎是一种非常昂贵的方法,因为每次我想连接时,我都会得到一个异常,必须在第一次之后处理。

,下面是我的问题:

在web应用程序代码中有其他方法可以做到这一点吗?还是应该让过程更新成为部署和配置的一部分,而不是应用程序层?

EN

回答 1

Stack Overflow用户

发布于 2015-06-12 18:51:28

如果您正在研究如何在不同的金字塔web应用程序版本部署(通常称为迁移)之间更改数据库(表、视图、存储过程)。

  • 如果您正在使用SQLAlchemy,您可以使用自动迁移工具(如[医]延髓 )
  • 如果使用原始SQL命令,则每次部署不同版本的应用程序时,都需要编写和运行自定义命令行脚本。此命令行脚本将为当前应用程序版本准备数据库。这将包括运行ALTER TABLE SQL命令等。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30784371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档