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 không dẫn đến 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 ("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 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ể ví dụ để 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
chứ khô배트맨 토토 phảiplpy.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윈 토토 : 문서 : 17 : 44.2. 데이터 값.
Khi bạn chuẩn bị một 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토토 사이트 : 문서 : 17 : 44.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
23109_23148배트맨 토토Đ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:
23751_24308
Lưu ý rằ배트맨 토토 vì tất cả các 배트맨 토토oại lệ từplpy.spiexceptions
Di chuyển mô -đun từSpierror
, an24494_24502
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 thay thế để 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 điều kiện 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 khớ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.