Bạn có thể cài đặt tiện ích mở rộng không? Nếu vậy, bạn có thể sử dụng tiện ích mở rộng
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
2CREATE FUNCTION callMyApp[]
RETURNS VOID
AS $$
import subprocess
subprocess.call[['/usr/bin/python', '/path/to/MyApp']]
$$ LANGUAGE plpythonu;
CREATE TRIGGER executePython
AFTER INSERT ON messages
FOR EACH ROW EXECUTE PROCEDURE callMyApp[];
Lưu ý rằng điều này sẽ chạy như người dùng Postgres, do đó có thể có vấn đề về quyền.
Ngoài ra còn có một tiện ích mở rộng gọi là
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
3, có thể được sử dụng, nhưng dường như không phải là một gói chính thức.CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
Bài đăng trên blog này có thể được quan tâm cho bạn.
Ngoài ra, đây gần như là một bản sao của chuỗi này có tên Run a Shell Script khi bản ghi cơ sở dữ liệu được ghi vào Postgres.
[Lưu ý: Tôi chưa kiểm tra bất kỳ mã nào trong số này.]
Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách gọi các thủ tục được lưu trữ của PostgreSQL từ chương trình Python.: in this tutorial, you will learn how to call PostgreSQL stored procedures from a Python program.
Các bước để gọi một thủ tục được lưu trữ sau PostgreSQL trong Python
Để gọi một thủ tục được lưu trữ sau PostgreSQL trong chương trình Python, bạn làm theo các bước đó:
Đầu tiên, hãy tạo kết nối cơ sở dữ liệu mới đến máy chủ cơ sở dữ liệu PostgreSQL bằng cách gọi hàm
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
4:
conn = psycopg2.connect[dsn]
Code language: Python [python]
Phương thức
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
4 trả về một thể hiện mới của lớp CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
6.Tiếp theo, tạo một con trỏ mới bằng cách gọi phương thức
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
7 của đối tượng kết nối.Code language: Python [python]
cur = conn.cursor[]
Sau đó, chuyển tên của quy trình được lưu trữ và các giá trị đầu vào tùy chọn cho phương thức
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
8 của đối tượng CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
9. Ví dụ:Code language: Python [python]
cur.execute["CALL sp_name[%s, %s];", [val1, val2]]
Nếu bạn đã lưu trữ thủ tục không chấp nhận bất kỳ tham số nào, bạn có thể bỏ qua đối số thứ hai như sau:
Code language: Python [python]
cur.execute["CALL sp_name];"]
Sau đó, hãy gọi phương thức
0 để thực hiện giao dịch:Code language: Python [python]
conn = psycopg2.connect[dsn]
Code language: Python [python]
conn.commit[];
Cuối cùng, hãy gọi phương thức
1 của các đối tượng
conn = psycopg2.connect[dsn]
Code language: Python [python]
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
9 và CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
6 để đóng kết nối với máy chủ cơ sở dữ liệu PostgreSQL.Code language: Python [python]
cur.close[] conn.close[]
Gọi một ví dụ về thủ tục được lưu trữ
Đầu tiên, hãy tạo quy trình được lưu trữ
4 sau trong cơ sở dữ liệuCode language: Python [python]
conn = psycopg2.connect[dsn]
5.Code language: Python [python]
conn = psycopg2.connect[dsn]
Code language: SQL [Structured Query Language] [sql]
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;
Thứ hai, tạo một tệp mới có tên
6 và xác định hàmCode language: Python [python]
conn = psycopg2.connect[dsn]
7 sau. HàmCode language: Python [python]
conn = psycopg2.connect[dsn]
7 gọi quy trình được lưu trữCode language: Python [python]
conn = psycopg2.connect[dsn]
4 từ cơ sở dữ liệuCode language: Python [python]
conn = psycopg2.connect[dsn]
5:
conn = psycopg2.connect[dsn]
Code language: Python [python]
Code language: Python [python]
#!/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']
Thực hiện tệp Python
Để thực hiện tệp Python, bạn sử dụng câu lệnh sau:
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
0Để xác minh chèn, bạn có thể truy vấn dữ liệu từ bảng
1,Code language: Python [python]
cur = conn.cursor[]
2 vàCode language: Python [python]
cur = conn.cursor[]
3:Code language: Python [python]
cur = conn.cursor[]
CREATE FUNCTION executePython[]
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
1Trong hướng dẫn này, bạn đã học từng bước làm thế nào để gọi một thủ tục được lưu trữ của PostgreSQL trong Python.
Hướng dẫn này có hữu ích không?