Psycopg2:在存储过程Postgres中创建一个表

时间:2018-01-05 10:50:10

标签: python postgresql psycopg2

存储过程:

CREATE OR REPLACE FUNCTION try_create() RETURNS INT AS $$

  BEGIN
      CREATE TABLE hello(id SERIAL PRIMARY KEY, name TEXT);
      RETURN 1;
  END ;

$$ LANGUAGE plpgsql;

test.py

import psycopg2

conn = psycopg2.connect(user='a', password='a', dbname='a')
cur = conn.cursor()
cur.callproc('try_create', ())
print cur.fetchall()

我正在尝试创建一个存储过程,该过程将创建一个名为hello的表。我使用python脚本调用它。运行上面的脚本后,我看到以下输出

[root@localhost partitioning]# python test.py
[(1,)]

但该表不是在db上创建的。我在这里搞错了吗?感谢。

1 个答案:

答案 0 :(得分:1)

您应该commit the transaction,添加命令:

...
conn.commit()
conn.close()

或者,您可以在自动提交模式下设置连接:

conn = psycopg2.connect(user='a', password='a', dbname='a')
conn.autocommit = True
cur = conn.cursor()
cur.callproc('try_create', ())
conn.close()

详细了解transactions in psycopg2.

相关问题