八月 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();
最后,调用cursor
和connection
对象的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
要验证插入,您可以从parts
、vendors
和vendor_parts
表中查询数据:
SELECT * FROM parts;
SELECT * FROM vendors;
SELECT * FROM vendor_parts;
在本教程中,您逐步学习了如何在 Python 中调用 PostgreSQL 存储过程。