八月 14, 2023
摘要:在本教程中,您将学习如何从 Python 程序调用 PostgreSQL 函数。
目录
在 Python 中调用 PostgreSQL 函数的步骤
要从 Python 程序调用 PostgreSQL 函数,请使用以下步骤:
首先,通过调用psycopg2
模块的connect()
函数创建一个新的数据库连接,连接到 PostgreSQL 数据库服务器。
conn = psycopg2.connect(dsn)
该connect()
方法会返回一个connection
类的新实例。
接下来,通过调用连接对象的cursor()
方法创建一个新游标。
cur = conn.cursor()
然后,将函数名称和可选输入值传递给游标对象的callproc()
方法。
cur.callproc('function_name', (value1,value2))
在内部,callproc()
方法会将函数调用和输入值转换为以下语句:
SELECT * FROM function_name(value1, value2);
因此,可以使用游标对象的execute()
方法来调用函数,如下所示:
cur.execute("SELECT * FROM function_name( %s,%s); ",(value1,value2))
两种形式的语句具有相同的效果。
之后,使用fetchone()
、fetchall()
、或fetchmany()
方法处理函数返回的结果集。
最后,调用cursor
和connection
对象的close()
方法,关闭与 PostgreSQL 数据库服务器的通信。
cur.close()
conn.close()
调用函数示例
下面的get_parts_by_vendors()
函数返回指定供应商提供的部件列表。
CREATE OR REPLACE FUNCTION get_parts_by_vendor(id integer)
RETURNS TABLE(part_id INTEGER, part_name VARCHAR) AS
$$
BEGIN
RETURN QUERY
SELECT parts.part_id, parts.part_name
FROM parts
INNER JOIN vendor_parts on vendor_parts.part_id = parts.part_id
WHERE vendor_id = id;
END;
$$ LANGUAGE plpgsql;
下面的get_parts()
函数调用get_parts_by_vendors()
函数:
#!/usr/bin/python
import psycopg2
from config import config
def get_parts(vendor_id):
""" get parts provided by a vendor specified by the vendor_id """
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()
# another way to call a function
# cur.execute("SELECT * FROM get_parts_by_vendor( %s); ",(vendor_id,))
cur.callproc('get_parts_by_vendor', (vendor_id,))
# 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()
下面调用get_parts()
函数来获取 id 为 1 的供应商提供的部件列表:
if __name__ == '__main__':
get_parts(1)
在本教程中,您逐步学习了如何在 Python 中调用 PostgreSQL 函数。