PostgreSQL: kèo chấp bóng đá hôm nay liệu: | |||
---|---|---|---|
prev | UP | Chương 43. PL/Python - Ngôn ngữ thủ tục Python | Tiếp theo |
Mô -đun ngôn ngữ PL/Python tự động nhập mô -đun Python gọi làplpy10480_10570plpy.foo.
TheplpyMô -đun cung cấp một số chức năng để thực thi các lệnh cơ sở dữ tỷ lệ kèo bóng đá 88:
thực thi
(tỷ lệ kèo bóng đá 88 vấn[,Max-Rows])Gọiplpy.execute
Với chuỗi tỷ lệ kèo bóng đá 88 vấn và đối số giới hạn hàng tùy chọn khiến tỷ lệ kèo bóng đá 88 vấn đó được chạy và kết quả sẽ được trả về trong một đối tượng kết quả.
11250_11385
RV = plpy.execute ("Chọn * từ my_table", 5)
Trả về tối đa 5 hàng từmy_table. Nếu nhưmy_tableCó cộtmy_column, nó sẽ được tỷ lệ kèo bóng đá 88 như:
foo = rv [i] ["my_column"]
Số lượng hàng được trả về có thể được lấy 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
()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ậtLệ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.
Các phương pháp này nêu ra một ngoại lệ khi được gọi trên một đối tượng kết quả từ một lệnh không tạo ra một tập hợp kết quả, ví dụ:Cập nhậtkhông cóTrở vềhoặcBảng thả. 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ể gỡ lỗi để gỡ lỗi kết quả thực thi tỷ lệ kèo bóng đá 88 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.executesẽ khiến toàn bộ kết quả được thiết lập đượ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.cursorchứ không phảiplpy.execute.
Chuẩn bị
(tỷ lệ kèo bóng đá 88 vấn[,argtypes])thực thi
(Plan[,Đối số[,Max-Rows]])plpy.prepare
Chuẩn bị kế hoạch thực thi cho một tỷ lệ kèo bóng đá 88 vấn. Nó được gọi với một chuỗi tỷ lệ kèo bóng đá 88 vấn và danh sách các loại tham số, nếu bạn có tham chiếu tham số trong tỷ lệ kèo bóng đá 88 vấn. Ví dụ:
plan = plpy.prepare ("chọn last_name từ my_users trong đó first_name = $ 1", ["văn bản"])
Textlà loại biến bạn sẽ tỷ lệ kèo bóng đá 88ề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 tỷ lệ kèo bóng đá 88 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àm14824_14838
Để 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 tỷ lệ kèo bóng đá 88 vấn) và danh sách các giá trị để thay thế vào tỷ lệ kèo bóng đá 88 vấn làm đối số thứ hai. Đối số thứ hai là tùy chọn nếu tỷ lệ kèo bóng đá 88 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.
Các tham số tỷ lệ kèo bóng đá 88 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 PostgreSQL và Python như được mô tả trongPhần 43.3. Ngoại lệ là các loại tổng hợp hiện không được hỗ trợ: chúng sẽ bị từ chối dưới dạng tham số tỷ lệ kèo bóng đá 88 vấn và được chuyển đổi thành chuỗi khi xuất hiện trong một kết quả tỷ lệ kèo bóng đá 88 vấn. Là một cách giải quyết cho vấn đề sau, tỷ lệ kèo bóng đá 88 vấn đôi khi có thể được viết lại để kết quả loại tổng hợp xuất hiện như một hàng kết quả chứ không phải là một trường của hàng kết quả. Ngoài ra, chuỗi kết quả có thể được phân tách bằng tay, nhưng phương pháp này không được khuyến khích vì nó không phải là chứng minh trong tương lai.
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 tỷ lệ kèo bóng đá 88 SPI (Chương 44) để 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ụcSDhoặcGD(xemPhần 43.4). Ví dụ:
Tạo chức năng sử dụng đã sử dụng () trả về kích hoạt là $$ 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;
con trỏ
(tỷ lệ kèo bóng đá 88 vấn)con trỏ
(Plan[,Đối số])Theplpy.cursorHà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 tỷ lệ kèo bóng đá 88 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.
Đối tượng con trỏ cung cấp AFetchPhươ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,FetchBắ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ữ tỷ lệ kèo bóng đá 88 đượ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ữ tỷ lệ kèo bóng đá 88 từ một bảng lớn là:
18029_18776
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ĐóngPhương pháp. Sau khi đóng, con trỏ không thể được tìm nạp từ nữa.
Tip:Không nhầm lẫn các đối tượng được tạo bởiplpy.cursorvới các con trỏ DB-API theo định nghĩa củaThông số kỹ thuật API cơ sở dữ tỷ lệ kèo bóng đá 88 Python. Họ không có điểm chung nào ngoại trừ tên.
Các chức năng tỷ lệ kèo bóng đá 88 có thể gặp phải 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
có thể nâng 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ă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.spiexceptionsXá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_zerotrở thànhDivisionByzero, độc đáo_violationtrở thànhUniqueViolation, FDW_ERRORtrở thànhfdwerror, v.v. Mỗi lớp ngoạ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àng hơn:
21141_21693
Lưu ý rằng vì tất cả các ngoại lệ từplpy.spiexceptionsDi chuyển mô -đun từSpierror, anngoại trừXử lý mệnh đề Nó sẽ bắt bất kỳ lỗi tỷ lệ kèo bóng đá 88 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 đượcSpierrorNgoạ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àoSQLSTATEThuộ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ứa"SQLSTATE"Mã lỗi. Cách tiếp cận này cung cấp cùng một chức năng