Python 如何将金字塔web应用程序使用的存储过程(PL/PGSQL)发送到环境中?

Python 如何将金字塔web应用程序使用的存储过程(PL/PGSQL)发送到环境中?,python,postgresql,stored-procedures,pyramid,Python,Postgresql,Stored Procedures,Pyramid,我正在开发一个使用金字塔web应用程序编写的web应用程序。使用MySQL存储关系数据。但是web应用程序也是一种数据存储工具,我们使用Postgres来实现这一目的 请注意,每个用户的帐户在Postgres中都有自己的连接参数。对于用户来说,运行Postgres的主机将不同 我们有两个存储过程,它们是应用程序正常运行所必需的。我想知道如何将这些过程发送到每个Postgres数据库实例。我想确保更新它们也很容易 这是我目前能想到的 我在应用程序的代码库中有一个名为procedures.sql的文

我正在开发一个使用金字塔web应用程序编写的web应用程序。使用MySQL存储关系数据。但是web应用程序也是一种数据存储工具,我们使用Postgres来实现这一目的

请注意,每个用户的帐户在Postgres中都有自己的连接参数。对于用户来说,运行Postgres的主机将不同

我们有两个存储过程,它们是应用程序正常运行所必需的。我想知道如何将这些过程发送到每个Postgres数据库实例。我想确保更新它们也很容易

这是我目前能想到的

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

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;
每当用户想要和他的数据库通话时,我都会从python应用程序执行
\u add\u procedures\u to\u DB
函数

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数据库的web响应周期内执行一些事务时,将获得连接参数

策略是在我更新程序代码的情况下,将
功能1\u v1
更改为
功能1\u v2

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

所以我的问题是:


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

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

  • 如果您正在使用,您可以使用自动化迁移工具,如

  • 如果您使用的是原始SQL命令,那么每次部署具有不同版本的应用程序时,都需要编写并运行自定义命令行脚本。此命令行脚本将为当前应用程序版本准备数据库。这将包括运行
    altertable
    SQL命令等


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

  • 如果您正在使用,您可以使用自动化迁移工具,如

  • 如果您使用的是原始SQL命令,那么每次部署具有不同版本的应用程序时,都需要编写并运行自定义命令行脚本。此命令行脚本将为当前应用程序版本准备数据库。这将包括运行
    altertable
    SQL命令等


hmmm,是的,这是一个明显的部署考虑因素。不仅仅是因为,如果您的存储过程有问题,您将以一种非常隐秘的方式使其对最终用户非常可见。另外,对于手头的问题,这是一个非常错误的工具。嗯,是的,这是一个明显的部署考虑因素。不仅仅是因为,如果您的存储过程有问题,您将以一种非常隐秘的方式使其对最终用户非常可见。另外,对于手头的问题,这是一个非常错误的工具。嗯,是的,这是一个明显的部署考虑因素。不仅仅是因为,如果您的存储过程有问题,您将以一种非常隐秘的方式使其对最终用户非常可见。另外,对于手头的问题,这是一个非常错误的工具。