python-3.x - Postgres 函数 - 从 Python 运行,不插入记录
问题描述
我正在尝试使用 Python 运行一个 PostgreSQL 函数,该函数将数据从一个表插入到另一个表中。如果我在 pgAdmin 中运行该函数,它可以工作,但如果我通过 Python 运行它,我会得到返回值,它表示它已执行,但它不插入任何记录。
这是我的 Python 代码
import psycopg2
from parse_config import fn_parse_config
def run_function():
conn = None
try:
# read database configuration
login_params = fn_parse_config("etl_process.ini", "psycopg_login")
# connect to the PostgreSQL database
conn = psycopg2.connect(**login_params)
# create a cursor object for execution
cur = conn.cursor()
# another way to call a stored procedure
#cur.execute("SELECT * FROM usp_test();")
cur.callproc('usp_test')
# process the result set
row = cur.fetchone()
while row is not None:
print(row)
row = cur.fetchone()
# close the communication with the PostgreSQL database server
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
if __name__ == '__main__':
run_function()
这是我的功能
CREATE OR REPLACE FUNCTION usp_test()
RETURNS integer AS $$
BEGIN
INSERT INTO staging_raw_file (Site,
StyleCode)
select CAST(a.Site as VARCHAR(10)),
CAST(a.StyleCode as VARCHAR(30))
from import_raw_file a;
return 5;
END; $$
LANGUAGE plpgsql;
解决方案
找到了答案,它需要自动提交设置
conn = psycopg2.connect(**login_params)
conn.autocommit = True
没有它,它实际上并没有运行插入,但它只会从没有那个的选择返回结果
推荐阅读
- c# - 通过 volatile 引用类型的值传递
- c++ - C ++何时检查异步方法的异常
- html - 如何在 Angular 2 中将 App 组件中的图像绑定到 HTML 文件
- reactjs - 从 ADFS 2016、react、ADAL.js 获取用户信息
- c++ - 默认构造函数如何知道在哪里初始化内存中数据成员的默认值
- android - 录制视频时仅录制设备声音并静音麦克风录制的声音
- python - Scapy 和 tcp syn 泛洪攻击
- c# - amazonS3client.SelectObjectContentAsync - 下载大型 jsonline 格式文件 - 不需要的换行符
- c - Linux内核模块开发buildroot
- django - 具有 netlify + Django 的静态站点在同一个 url 上