Python 如何将金字塔web应用程序使用的存储过程(PL/PGSQL)发送到环境中?
我正在开发一个使用金字塔web应用程序编写的web应用程序。使用MySQL存储关系数据。但是web应用程序也是一种数据存储工具,我们使用Postgres来实现这一目的 请注意,每个用户的帐户在Postgres中都有自己的连接参数。对于用户来说,运行Postgres的主机将不同 我们有两个存储过程,它们是应用程序正常运行所必需的。我想知道如何将这些过程发送到每个Postgres数据库实例。我想确保更新它们也很容易 这是我目前能想到的 我在应用程序的代码库中有一个名为procedures.sql的文件Python 如何将金字塔web应用程序使用的存储过程(PL/PGSQL)发送到环境中?,python,postgresql,stored-procedures,pyramid,Python,Postgresql,Stored Procedures,Pyramid,我正在开发一个使用金字塔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命令,那么每次部署具有不同版本的应用程序时,都需要编写并运行自定义命令行脚本。此命令行脚本将为当前应用程序版本准备数据库。这将包括运行
SQL命令等altertable
- 如果您正在使用,您可以使用自动化迁移工具,如
- 如果您使用的是原始SQL命令,那么每次部署具有不同版本的应用程序时,都需要编写并运行自定义命令行脚本。此命令行脚本将为当前应用程序版本准备数据库。这将包括运行
SQL命令等altertable