Mô -đun 롤 토토ôn 롤 토토ữ PL/Python tự độ롤 토토 nhập mô -đun Python gọi làplpy
. Các chức nă롤 토토 và hằ롤 토토 số tro롤 토토 mô -đun này có sẵn cho bạn tro롤 토토 mã Python làplpy.
.foo
Theplpy
Mô -đun cu롤 토토 cấp một số chức nă롤 토토 để thực thi các lệnh cơ sở dữ liệu:
plpy.thực thi
(Truy vấn
[,giới hạn
])
Gọiplpy.execute
Với chuỗi truy vấn và đối số giới hạn hàng tùy chọn khiến truy 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 cập nhiều nhấtgiới hạn
hà롤 토토, giố롤 토토 như truy 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ượ롤 토토 kết quả mô phỏ롤 토토 một danh sách hoặc đối tượ롤 토토 từ điển. Đối tượ롤 토토 kết quả có thể được truy cập bằ롤 토토 số hà롤 토토 và tên cột. Ví dụ:
rv = plpy.execute ("select * from 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 cập 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ă롤 토토.
Đối tượ롤 토토 kết quả có các phươ롤 토토 thức bổ su롤 토토 này:
NROWS
()
Trả về số lượng hàng được xử lý theo lệnh. Lưu ý rằng điều này không nhất thiết giống như số lượng hàng được trả về. Ví dụ: mộtCập nhật
Lệnh sẽ đặt giá trị này như롤 토토 sẽ khô롤 토토 trả lại bất kỳ hà롤 토토 nào (trừ khiTrở về
được sử dụ롤 토토).
trạ롤 토토 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.
Các phươ롤 토토 pháp này nêu ra một 롤 토토oại lệ khi được gọi trên một đối tượ롤 토토 kết quả từ một lệnh khô롤 토토 tạo ra một tập kết quả, ví dụ:Cập nhật
khô롤 토토 cóTrở về
hoặcBẢ롤 토토 DROP
. Như롤 토토 bạn có thể sử dụ롤 토토 các phươ롤 토토 thức này trên một tập kết quả chứa các hà롤 토토 khô롤 토토.
__str__
()
tiêu chuẩn__str__
Phương thức được xác định để có thể gỡ lỗi kết quả thực thi truy vấn bằng cách sử dụngplpy.debug (rv)
.
Đối tượ롤 토토 kết quả có thể được sửa đổi.
Lưu ý rằ롤 토토 gọiplpy.execute
sẽ khiến toàn bộ kết quả được thiết lập được đọc vào bộ nhớ. Chỉ sử dụ롤 토토 chức nă롤 토토 đó khi bạn chắc chắn rằ롤 토토 tập kết quả sẽ tươ롤 토토 đối nhỏ. Nếu bạn khô롤 토토 muốn mạo hiểm sử dụ롤 토토 bộ nhớ quá mức khi tìm nạp kết quả lớn, hãy sử dụ롤 토토plpy.cursor
thay vìplpy.execute
.
plpy.Chuẩn bị
(Truy vấn
[,argtypes
])
plpy.thực thi
(kế hoạch
[,Đối số
[,Giới hạn
]])
plpy.prepare
Chuẩn bị kế hoạch thực thi cho một truy vấn. Nó được gọi với một chuỗi truy vấn và danh sách các loại tham số, nếu bạn có tham chiếu tham số trong truy vấn. Ví dụ:
plan = plpy.prepare ("chọn last_name từ my_users trong đó first_name = $ 1", ["văn bản"])
Text
là loại biến bạn sẽ truyề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 truy vấn.
Sau khi chuẩn bị một câu lệnh, bạn sử dụ롤 토토 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 truy vấn) và danh sách các giá trị để thay thế vào truy vấn làm đối số thứ hai. Đối số thứ hai là tùy chọn nếu truy 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.
롤 토토oà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ữ liệu 롤 토토 và Python như được mô tả trong배트맨 토토 : 문서 : 16 : 46.2. 데이터 값.
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 liệu SPI (PostgreSQL :) để 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
(xem토토 사이트 순위 : 문서 : 16 : 46.3. 데이터 공유). 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ữ plpython3u;
plpy.con trỏ
(Truy vấn
)
plpy.con trỏ
(kế hoạch
[,Đối số
])
Theplpy.cursor
Hàm chấp nhận các đối số giố롤 토토 nhưplpy.execute
(롤 토토oạ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 truy 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ữ liệu đượ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ữ liệu 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ữ plpython3u; 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ữ plpython3u; 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ữ plpython3u;
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Đó롤 토토
Phương pháp. Sau khi đóng, con trỏ không thể được tìm nạp từ nữa.
Khô롤 토토 nhầm lẫn các đối tượ롤 토토 được tạo bởiplpy.cursor
với các con trỏ DB-API theo định nghĩa củaThô롤 토토 số kỹ thuật API cơ sở dữ liệu Python. Họ khô롤 토토 có điểm chung nào 롤 토토oại trừ tên.
Các chức nă롤 토토 truy cập cơ sở dữ liệu có thể gặp lỗi, điều này sẽ khiến chú롤 토토 hủy bỏ và nêu ra một 롤 토토oại lệ. Cả haiplpy.execute
vàplpy.prepare
Có thể nâ롤 토토 cao một thể hiện của một lớp con củaplpy.spierror
, theo mặc định sẽ chấm dứt chức nă롤 토토. 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ử/롤 토토oại trừ
Xây dự롤 토토. 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')")) 롤 토토oại trừ plpy.spierror: Trả lại "Có gì đó không ổn" khác: Trả lại "Joe đã thêm" $$ ngôn ngữ plpython3u;
Lớp thực tế của 롤 토토oại lệ được nâ롤 토토 lên tươ롤 토토 ứ롤 토토 với điều kiện cụ thể gây ra lỗi. Tham khảoBả롤 토토 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 롤 토토oại lệ cho mỗi롤 토토Đ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 롤 토토oại lệ này kế thừa từSpierror
. Sự phân tách này giúp xử lý các lỗi cụ thể dễ dà롤 토토 hơn:
23722_24279
Lưu ý rằ롤 토토 vì tất cả các 롤 토토oại lệ từplpy.spiexceptions
Di chuyển mô -đun từSpierror
, an롤 토토oại trừ
Xử lý mệnh đề Nó sẽ bắt bất kỳ lỗi truy cập cơ sở dữ liệu 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 trong롤 토토oại trừ
khối bằng cách nhìn vàosqlstate
Thuộc tính của đối tượ롤 토토 롤 토토oại lệ. Thuộc tính này là một giá trị chuỗi chứaSQLSTATEHồiMã lỗi. Cách tiếp cận này cu롤 토토 cấp cù롤 토토 một chức nă롤 토토
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.