Hướng dẫn how do i run a python script from a stored procedure in postgres? - làm cách nào để chạy tập lệnh python từ thủ tục được lưu trữ trong postgres?

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;
2

CREATE 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.

cur = conn.cursor()

Code language: Python (python)

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ụ:

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

Code language: Python (python)

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:

cur.execute("CALL sp_name);")

Code language: Python (python)

Sau đó, hãy gọi phương thức

conn = psycopg2.connect(dsn)

Code language: Python (python)
0 để thực hiện giao dịch:

conn.commit();

Code language: Python (python)

Cuối cùng, hãy gọi phương thức

conn = psycopg2.connect(dsn)

Code language: Python (python)
1 của các đối tượng
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.

cur.close() conn.close()

Code language: Python (python)

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ữ

conn = psycopg2.connect(dsn)

Code language: Python (python)
4 sau trong cơ sở dữ liệu

conn = psycopg2.connect(dsn)

Code language: Python (python)
5.

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;

Code language: SQL (Structured Query Language) (sql)

Thứ hai, tạo một tệp mới có tên

conn = psycopg2.connect(dsn)

Code language: Python (python)
6 và xác định hàm

conn = psycopg2.connect(dsn)

Code language: Python (python)
7 sau. Hàm

conn = psycopg2.connect(dsn)

Code language: Python (python)
7 gọi quy trình được lưu trữ

conn = psycopg2.connect(dsn)

Code language: Python (python)
4 từ cơ sở dữ liệu

conn = psycopg2.connect(dsn)

Code language: Python (python)
5:

#!/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')

Code language: Python (python)

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

cur = conn.cursor()

Code language: Python (python)
1,

cur = conn.cursor()

Code language: Python (python)
2 và

cur = conn.cursor()

Code language: Python (python)
3:

CREATE FUNCTION executePython()
RETURNS VOID
AS $$
#!/bin/sh
python /path/to/MyApp
$$
LANGUAGE plsh;
1

Trong 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?

Postgresql có thể chạy kịch bản Python không?

Ngôn ngữ thủ tục PL/Python cho phép các hàm PostgreSQL được viết bằng ngôn ngữ Python. Để cài đặt PL/Python trong một cơ sở dữ liệu cụ thể, hãy sử dụng Tạo phần mở rộng plpythonu hoặc từ dòng lệnh shell sử dụng DbName createlang plpythonu (nhưng xem thêm Phần 42.1).. To install PL/Python in a particular database, use CREATE EXTENSION plpythonu, or from the shell command line use createlang plpythonu dbname (but see also Section 42.1).

Làm thế nào để Python kết nối với mã PostgreSQL?

Làm thế nào để kết nối với PostgreSQL từ Python?Để kết nối với thể hiện cơ sở dữ liệu PostgreSQL từ tập lệnh Python của bạn, bạn cần sử dụng thư viện đầu nối cơ sở dữ liệu.Trong Python, bạn có một số tùy chọn mà bạn có thể chọn.Một số thư viện được viết bằng python thuần túy bao gồm PG8000 và py-postgresql.use a database connector library. In Python, you have several options that you can choose from. Some libraries that are written in pure Python include pg8000 and py-postgresql.

Chúng ta có thể sử dụng thủ tục được lưu trữ trong PostgreSQL không?

Các thủ tục lưu trữ PostgreSQL hỗ trợ các hoạt động thủ tục, rất hữu ích trong khi xây dựng các ứng dụng cơ sở dữ liệu mạnh mẽ - nó làm tăng hiệu suất, năng suất và khả năng mở rộng của chúng.Giống như UDFS, các quy trình được lưu trữ là một chuỗi các câu lệnh SQL có sẵn cho các ứng dụng truy cập RDBMS., which are helpful while building powerful database apps — it increases their performance, productivity, and scalability. Like UDFs, stored procedures are a sequence of SQL statements available to apps that access an RDBMS.

Làm thế nào gửi dữ liệu từ postgresql đến python?

Đầu tiên, kết nối với máy chủ cơ sở dữ liệu PostgreSQL bằng cách gọi hàm Connect () của mô -đun psycopg ...
Conn = psycopg2.connect (DSN) ....
Cur = Conn.Cursor () ....
cur.execute (SQL, (value1, value2)) ....
id = cur.fetchone () [0] ....
Conn.Commit () ....
cur.close () Conn.close ().