gpt4 book ai didi

python - 执行函数后删除临时表

转载 作者:行者123 更新时间:2023-11-29 12:32:39 24 4
gpt4 key购买 nike

我在 Python 中多次循环执行自己编写的 postgresql 函数。我正在使用 psycopg2 框架来执行此操作。我编写的函数具有以下结构:

CREATE OR REPLACE FUNCTION my_func()
RETURNS void AS
$$
BEGIN
-- create a temporary table that should be deleted after
-- the functions finishes
-- normally a CREATE TABLE ... would be here
CREATE TEMPORARY TABLE temp_t
(
seq integer,
...
) ON COMMIT DROP;

-- now the insert
INSERT INTO temp_t
SELECT
...

END
$$
LANGUAGE 'plpgsql';

基本上就是 python 部分

import time
import psycopg2
conn = psycopg2.connect(host="localhost", user="user", password="...", dbname="some_db")
cur = conn.cursor()
for i in range(1, 11):
print i
print time.clock()
cur.callproc("my_func")
print time.clock()
cur.close()
conn.close()

运行 python 脚本时出现的错误是:

---> relation "temp_t" already exists

基本上我想测量执行函数需要多长时间。这样做,循环将运行几次。将 SELECT 的结果存储在临时表中应该会替换通常会创建输出表的 CREATE TABLE ... 部分为什么在我从 Python 执行函数后 postgres 不删除函数?

最佳答案

循环中的所有函数调用都在一个事务中执行,因此每次都不会删除临时表。设置 autocommit 应该会改变这种行为:

...
conn = psycopg2.connect(host="localhost", user="user", password="...", dbname="some_db")
conn.autocommit = True
cur = conn.cursor()
for i in range(1, 11):
...

关于python - 执行函数后删除临时表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872457/

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