gpt4 book ai didi

python - 如何将 Pyramid 网络应用程序使用的存储过程(PL/PGSQL)发送到环境?

转载 作者:行者123 更新时间:2023-11-29 13:56:29 25 4
gpt4 key购买 nike

我正在开发一个使用 Pyramid 网络应用程序编写的网络应用程序。使用 MySQL 来存储相关的东西。但网络应用程序也是一种数据存储工具,我们为此目的使用 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 应用程序执行 _add_procedures_to_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 DB 的 Web 响应周期内执行某些事务时,将获取连接参数。

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

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

所以这是我的问题:

有没有其他方法可以在网络应用程序代码中执行此操作?或者我应该将程序更新作为部署和配置的一部分而不是应用层的一部分吗?

最佳答案

如果您正在寻找如何在不同的 Pyramid Web 应用程序版本部署之间更改数据库(表、 View 、存储过程),这通常称为迁移

  • 如果您使用 SQLAlchemy您可以使用自动迁移工具,例如 Alembic

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

关于python - 如何将 Pyramid 网络应用程序使用的存储过程(PL/PGSQL)发送到环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com