PostgreSQL Python 教程: 调用 PostgreSQL 存储过程

八月 14, 2023

摘要:在本教程中,您将学习如何从 Python 程序调用 PostgreSQL 存储过程。

在 Python 中调用 PostgreSQL 存储过程的步骤

要在 Python 程序中调用 PostgreSQL 存储过程,请按照以下步骤操作:

首先,通过调用connect()函数创建新的数据库连接,连接到 PostgreSQL 数据库服务器:

conn = psycopg2.connect(dsn)

connect()方法会返回一个connection类的新实例。

接下来,通过调用连接对象的cursor()方法创建一个新游标。

cur = conn.cursor()

然后,将存储过程的名称和可选输入值传递给cursor对象的execute()方法。例如:

cur.execute("CALL sp_name(%s, %s);", (val1, val2))

如果您的存储过程不接受任何参数,则可以省略第二个参数,如下所示:

cur.execute("CALL sp_name();")

之后,调用commit()方法来提交事务:

conn.commit();

最后,调用cursorconnection对象的close()方法,关闭与 PostgreSQL 数据库服务器的连接。

cur.close()
conn.close()

调用存储过程示例

首先,在suppliers数据库中创建如下的add_new_part()存储过程。

CREATE OR REPLACE PROCEDURE add_new_part(
	new_part_name varchar,
	new_vendor_name varchar
)
AS $$
DECLARE
	v_part_id INT;
	v_vendor_id INT;
BEGIN
	-- insert into the parts table
	INSERT INTO parts(part_name) 
	VALUES(new_part_name) 
	RETURNING part_id INTO v_part_id;

	-- insert a new vendor
	INSERT INTO vendors(vendor_name)
	VALUES(new_vendor_name)
	RETURNING vendor_id INTO v_vendor_id;

	-- insert into vendor_parts
	INSERT INTO vendor_parts(part_id, vendor_id)
	VALUEs(v_part_id,v_vendor_id);

END;
$$ LANGUAGE PLPGSQL;

其次,创建一个名为stored_proc.py的新文件并定义如下的add_part()函数。add_part()函数从suppliers数据库调用存储过程add_new_part()

#!/usr/bin/python
import psycopg2
from config import config

def add_part(part_name, vendor_name):

    conn = None
    try:
        # read database configuration
        params = config()
        # connect to the PostgreSQL database
        conn = psycopg2.connect(**params)
        # create a cursor object for execution
        cur = conn.cursor()

        # call a stored procedure
        cur.execute('CALL add_new_part(%s,%s)', (part_name, vendor_name))

        # commit the transaction
        conn.commit()

        # close the cursor
        cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
        print(error)
    finally:
        if conn is not None:
            conn.close()

if __name__ == '__main__':
    add_part('OLED', 'LG')

执行 python 文件

要执行 python 文件,请使用以下命令:

python stored_proc.py

要验证插入,您可以从partsvendorsvendor_parts表中查询数据:

SELECT * FROM parts;
SELECT * FROM vendors;
SELECT * FROM vendor_parts;

在本教程中,您逐步学习了如何在 Python 中调用 PostgreSQL 存储过程。