Mô -đun ngôn ngữ PL/Python tự động nhập mô -đun Python gọi làplpy
. Các chức năng và hằng số trong mô -đun này có sẵn cho bạn trong mã Python làplpy.
.foo
The11249_11255
Mô -đun cung cấp một số chức năng để thực thi các lệnh cơ sở dữ kèo bóng đá hôm nay và ngày mai:
plpy.thực thi
(kèo bóng đá hôm nay và ngày mai vấn
[,giới hạn
])
Gọiplpy.execute
Với chuỗi kèo bóng đá hôm nay và ngày mai vấn và đối số giới hạn hàng tùy chọn khiến kèo bóng đá hôm nay và ngày mai vấn được chạy và kết quả sẽ được trả về trong một đối tượng kết quả.
nếuGiới hạn
được chỉ định và lớn hơn 0, sau đóplpy.execute
Truy kèo bóng đá hôm nay và ngày mai nhiều nhấtgiới hạn
hàng, giống như kèo bóng đá hôm nay và ngày mai vấn bao gồm mộtgiới hạn
mệnh đề. Bỏ quagiới hạn
hoặc chỉ định nó dưới dạng số 0 dẫn đến không giới hạn hàng.
Đối tượng kết quả mô phỏng một danh sách hoặc đối tượng từ điển. Đối tượng kết quả có thể được truy kèo bóng đá hôm nay và ngày mai bằng số hàng và tên cột. Ví dụ:
rv = plpy.execute ("chọn * từ my_table", 5)
Trả về tối đa 5 hàng từmy_table
. Nếu nhưmy_table
Có cộtmy_column
, nó sẽ được truy kèo bóng đá hôm nay và ngày mai như:
foo = rv [i] ["my_column"]
Số lượng hàng được trả về có thể thu được bằng cách sử dụng tích hợplen
chức năng.
Đối tượng kết quả có các phương thức bổ sung này:
NROWS
()
13165_13311kèo bóng đá hôm nay và ngày mai nhật
Lệnh sẽ đặt giá trị này nhưng sẽ không trả lại bất kỳ hàng nào (trừ khiTrở về
được sử dụng).
trạng thái
()
Thespi_execute ()
Giá trị trả lại.
colnames
()
coltypes
()
coltypmods
()
Trả về danh sách các tên cột, danh sách các loại cột OID và danh sách các bộ sửa đổi loại cụ thể cho các cột, tương ứng.
14234_14356kèo bóng đá hôm nay và ngày mai nhật
không cóTrở về
hoặcBẢNG DROP
. Nhưng bạn có thể sử dụng các phương thức này trên một tập kết quả chứa các hàng không.
__str__
()
tiêu chuẩn__str__
Phương thức được xác định để có thể ví dụ để gỡ lỗi kết quả thực thi kèo bóng đá hôm nay và ngày mai vấn bằng cách sử dụngplpy.debug (rv)
.
Đối tượng kết quả có thể được sửa đổi.
Lưu ý rằng gọiplpy.execute
sẽ khiến toàn bộ kết quả được đặt được đọc vào bộ nhớ. Chỉ sử dụng chức năng đó khi bạn chắc chắn rằng tập kết quả sẽ tương đối nhỏ. Nếu bạn không muốn mạo hiểm sử dụng bộ nhớ quá mức khi tìm nạp kết quả lớn, hãy sử dụngplpy.cursor
thay vìplpy.execute
.
plpy.Chuẩn bị
(kèo bóng đá hôm nay và ngày mai vấn
[,argtypes
])
plpy.thực thi
(Plan
[,Đối số
[,giới hạn
]])
plpy.prepare
Chuẩn bị kế hoạch thực thi cho một kèo bóng đá hôm nay và ngày mai vấn. Nó được gọi với một chuỗi kèo bóng đá hôm nay và ngày mai vấn và danh sách các loại tham số, nếu bạn có tham chiếu tham số trong kèo bóng đá hôm nay và ngày mai vấn. Ví dụ:
16287_16376
Text
là loại biến bạn sẽ kèo bóng đá hôm nay và ngày maiền cho$ 1
. Đối số thứ hai là tùy chọn nếu bạn không muốn chuyển bất kỳ tham số nào cho kèo bóng đá hôm nay và ngày mai vấn.
Sau khi chuẩn bị một câu lệnh, bạn sử dụng một biến thể của hàmplpy.execute
Để chạy nó:
rv = plpy.execute (kế hoạch, ["name"], 5)
Chuyển kế hoạch làm đối số đầu tiên (thay vì chuỗi kèo bóng đá hôm nay và ngày mai vấn) và danh sách các giá trị để thay thế vào kèo bóng đá hôm nay và ngày mai vấn làm đối số thứ hai. Đối số thứ hai là tùy chọn nếu kèo bóng đá hôm nay và ngày mai vấn không mong đợi bất kỳ tham số nào. Đối số thứ ba là giới hạn hàng tùy chọn như trước.
Ngoài ra, bạn có thể gọithực thi
Phương thức trên đối tượng kế hoạch:
rv = plan.execute (["name"], 5)
Các tham số truy vấn và các trường hàng kết quả được chuyển đổi giữa các loại dữ kèo bóng đá hôm nay và ngày mai PostgreSQL và Python như được mô tả trongPhần 46.3.
Khi bạn chuẩn bị kế hoạch bằng mô -đun PL/Python, nó sẽ được lưu tự động. Đọc tài kèo bóng đá hôm nay và ngày mai SPI (Chương 47) Để biết mô tả về ý nghĩa của điều này. Để sử dụng hiệu quả điều này trên các chức năng, người ta cần sử dụng một trong các từ điển lưu trữ liên tụcSD
hoặcGD
(xemPhần 46.4). Ví dụ:
Tạo chức năng sử dụng đã sử dụng) Nếu "kế hoạch" trong SD: kế hoạch = sd ["kế hoạch"] khác: Plan = plpy.prepare ("Chọn 1") SD ["Kế hoạch"] = Kế hoạch # phần còn lại của chức năng $$ ngôn ngữ plpythonu;
plpy.con trỏ
(kèo bóng đá hôm nay và ngày mai vấn
)
plpy.con trỏ
(kế hoạch
[,Đối số
])
Theplpy.cursor
Hàm chấp nhận các đối số giống nhưplpy.execute
(ngoại trừ giới hạn hàng) và trả về một đối tượng con trỏ, cho phép bạn xử lý các bộ kết quả lớn trong các khối nhỏ hơn. Như vớiplpy.execute
, Một chuỗi kèo bóng đá hôm nay và ngày mai vấn hoặc đối tượng kế hoạch cùng với danh sách các đối số có thể được sử dụng hoặccon trỏ
Hàm có thể được gọi là phương thức của đối tượng kế hoạch.
Đối tượng con trỏ cung cấp mộtFetch
Phương thức chấp nhận tham số số nguyên và trả về một đối tượng kết quả. Mỗi lần bạn gọiFetch
, đối tượng được trả về sẽ chứa lô hàng tiếp theo, không bao giờ lớn hơn giá trị tham số. Khi tất cả các hàng đã cạn kiệt,Fetch
Bắt đầu trả về một đối tượng kết quả trống. Các đối tượng con trỏ cũng cung cấp mộtGiao diện Iterator, năng suất một hàng tại một thời điểm cho đến khi tất cả các hàng bị cạn kiệt. Dữ kèo bóng đá hôm nay và ngày mai được lấy theo cách đó không được trả về dưới dạng các đối tượng kết quả, mà là từ điển, mỗi từ điển tương ứng với một hàng kết quả.
Một ví dụ về hai cách xử lý dữ kèo bóng đá hôm nay và ngày mai từ một bảng lớn là:
Tạo chức năng Count_odd_iterator () trả về số nguyên dưới dạng $$ ODD = 0 Đối với hàng trong plpy.cursor ("Chọn Num từ Largetable"): Nếu hàng ['num'] % 2: ODD += 1 trả về lẻ $$ Ngôn ngữ plpythonu; Tạo chức năng Count_odd_fetch (số nguyên Batch_Size) trả về số nguyên dưới dạng $$ ODD = 0 con trỏ = plpy.cursor ("Chọn Num từ Largetable") Trong khi đúng: hàng = con trỏ.fetch (batch_size) Nếu không phải hàng: phá vỡ Đối với hàng theo hàng: Nếu hàng ['num'] % 2: ODD += 1 trả về lẻ $$ Ngôn ngữ plpythonu; Tạo hàm Count_odd_prepared () trả về số nguyên dưới dạng $$ ODD = 0 plan = plpy.prepare ("chọn num từ rargetable wher num % $ 1 < 0", ["integer"])) hàng = list (plpy.cursor (plan, [2])) # hoặc: = list (plan.cursor ([2])) Trả lại Len (hàng) $$ ngôn ngữ plpythonu;
con trỏ được tự động xử lý. Nhưng nếu bạn muốn phát hành rõ ràng tất cả các tài nguyên do con trỏ nắm giữ, hãy sử dụngĐóng
Phương pháp. Sau khi đóng, con trỏ không thể được tìm nạp từ nữa.
Không nhầm lẫn các đối tượng được tạo bởiplpy.cursor
với các con trỏ DB-API theo định nghĩa củaThông số kỹ thuật API cơ sở dữ kèo bóng đá hôm nay và ngày mai Python21473_21532
Các chức năng truy cập cơ sở dữ kèo bóng đá hôm nay và ngày mai có thể gặp lỗi, điều này sẽ khiến chúng hủy bỏ và nêu ra một ngoại lệ. Cả haiplpy.execute
vàplpy.prepare
22011_22053plpy.spierror
, theo mặc định sẽ chấm dứt chức năng. Lỗi này có thể được xử lý giống như bất kỳ ngoại lệ python nào khác, bằng cách sử dụngthử/ngoại trừ
Xây dựng. Ví dụ:
Tạo chức năng Try_adding_joe () trả về văn bản dưới dạng $$ thử: plpy.execute ("chèn vào giá trị người dùng (tên người dùng) ('joe')")) ngoại trừ plpy.spierror: Trả lại "Có gì đó không ổn" khác: Trả lại "Joe đã thêm" $$ ngôn ngữ plpythonu;
Lớp thực tế của ngoại lệ được nâng lên tương ứng với điều kiện cụ thể gây ra lỗi. Tham khảoBảng A.1Để biết danh sách các điều kiện có thể. Mô -đunplpy.spiexceptions
Xác định một lớp ngoại lệ cho mỗiPostgreSQLĐiều kiện, lấy tên của họ từ tên điều kiện. Ví dụ,Division_by_zero
trở thànhDivisionbyzero
, độc đáo_violation
trở thànhđộc đáo
, FDW_ERROR
trở thànhfdwerror
, v.v. Mỗi lớp ngoại lệ này kế thừa từSpierror
23458_23534
23569_24125
Lưu ý rằng vì tất cả các ngoại lệ từplpy.spiexceptions
Di chuyển mô -đun từSpierror
, anngoại trừ
Xử lý mệnh đề Nó sẽ bắt bất kỳ lỗi truy cập cơ sở dữ kèo bóng đá hôm nay và ngày mai nào.
Là một cách khác để xử lý các điều kiện lỗi khác nhau, bạn có thể bắt đượcSpierror
Ngoại lệ và xác định tình trạng lỗi cụ thể bên trongngoại trừ
khối bằng cách nhìn vàoSQLSTATE
Thuộc tính của đối tượng ngoại lệ. Thuộc tính này là một giá trị chuỗi chứaSQLSTATExôngMã lỗi. Cách tiếp cận này cung cấp cùng một chức năng
25980_26206Mẫu nàyĐể báo cáo vấn đề tài kèo bóng đá hôm nay và ngày mai.