Summary: in this tutorial, you will learn how to call PostgreSQL functions from a Python program.
Calling a PostgreSQL function in Python steps
To call a PostgreSQL function from a Python program, you use the following steps:
First, create a new database connection to the PostgreSQL database server by calling the connect()
function of the psycopg2
module.
conn = psycopg2.connect(dsn)
The connect()
method returns a new instance of the connection
class.
Next, create a new cursor by calling the cursor()
method of the connection object.
cur = conn.cursor()
Then, pass the name of the function and the optional input values to the callproc()
method of the cursor object.
cur.callproc('function_name', (value1,value2))
Internally, the callproc()
method translates the function call and input values into the following statement
SELECT * FROM function_name(value1,value2);
Both statements have the same effect.
After that, process the result set returned by the function using the fetchone()
, fetchall()
, or fetchmany()
method.
Finally, call the close()
method of the cursor
and connection
objects to close the communication with the PostgreSQL database server.
cur.close()
conn.close()
Calling a function example
The following get_parts_by_vendors()
function returns a list of parts provided by a specified vendor.
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;
The following get_parts()
function calls the get_parts_by_vendors()
function:
!/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()
The following calls the get_parts()
function to get a list of parts provided by the vendor with id 1:
if name == 'main':
get_parts(1)
In this tutorial, you have learned step by step how to call a PostgreSQL function in Python.
Leave a Reply