Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
Tài kèo tỷ số bóng đá euro hôm nay này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

43.7. kèo tỷ số bóng đá euro hôm nay

Mô -đun ngôn ngữ PL/Python tự động nhập một Python Mô -đun được 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.

43.7.1. Cơ sở dữ liệu Hàm kèo tỷ số bóng đá euro hôm nay

TheplpyMô -đun cung cấp một số Các chức năng để thực thi các lệnh cơ sở dữ kèo tỷ số bóng đá euro hôm nay:

plpy.thực thi(kèo tỷ số bóng đá euro hôm nay vấn[,Max-Rows])

Gọiplpy.executevới một kèo tỷ số bóng đá euro hôm nay vấn chuỗi và đối số giới hạn hàng tùy chọn khiến kèo tỷ số bóng đá euro hôm nay vấn đó là chạy và kết quả được trả về trong một đối tượng kết quả.

Đối tượng kết quả mô phỏng một danh sách hoặc đối tượng từ điển. Các Đối tượng kết quả có thể được kèo tỷ số bóng đá euro hôm nay bằng số hàng và tên cột. Vì 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_tablecó cộtmy_column, nó sẽ được kèo tỷ số bóng đá euro hôm nay 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ợplenchứ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ộtkèo tỷ số bóng đá euro hôm nay 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).

status()

Thespi_execute ()trở lại giá trị.

colnames()
coltypes()
coltypmods()

Trả lại danh sách tên cột, danh sách các loại cột OIDS và Danh sách các bộ sửa đổi loại cụ thể cho các cột, tương ứng.

Những 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 kết quả, ví dụ:kèo tỷ số bóng đá euro hôm nay nhậtkhông cóTrở về, hoặcBẢNG DROP. Nhưng việc sử dụng những thứ này là ổn các phương thức 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 pháp được xác định Vì vậy, ví dụ như có thể gỡ lỗi kết quả thực thi kèo tỷ số bóng đá euro hôm nay vấn sử dụngplpy.debug (rv).

Đối tượng kết quả có thể được sửa đổi.

Lưu ý rằng gọiplpy.executeWill Nguyên nhân toàn bộ kết quả được thiết lập để đọc vào bộ nhớ. Chỉ sử dụng điều đó chức năng khi bạn chắc chắn rằng tập kết quả sẽ tương đối bé 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, sử dụngplpy.cursorthay vìplpy.execute.

plpy.Chuẩn bị(kèo tỷ số bóng đá euro hôm nay vấn[,argtypes])
plpy.thực thi(kế hoạch[,Đối số[,Max-Rows]])

plpy.prepareChuẩn bị Kế hoạch thực hiện cho một kèo tỷ số bóng đá euro hôm nay vấn. Nó được gọi với một chuỗi kèo tỷ số bóng đá euro hôm nay vấn và một Danh sách các loại tham số, nếu bạn có tham chiếu tham số trong kèo tỷ số bóng đá euro hôm nay 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ẽ được kèo tỷ số bóng đá euro hôm nayền cho$ 1. Thứ hai Đối số 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 tỷ số bóng đá euro hôm nay 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ì kèo tỷ số bóng đá euro hôm nay vấn chuỗi) và danh sách các giá trị để thay thế vào kèo tỷ số bóng đá euro hôm nay vấn làm Đối số thứ hai. Đối số thứ hai là tùy chọn nếu kèo tỷ số bóng đá euro hôm nay vấn không không mong đợi bất kỳ tham số. Đối số thứ ba là hàng tùy chọn giới hạn như trước.

Các tham số kèo tỷ số bóng đá euro hôm nay 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 các tham số kèo tỷ số bóng đá euro hôm nay vấn và được chuyển đổi thành chuỗi khi xuất hiện trong một kết quả kèo tỷ số bóng đá euro hôm nay vấn. Là một cách giải quyết cho vấn đề sau, kèo tỷ số bóng đá euro hôm nay 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 cách tiếp cận này không được khuyến khích vì nó không chống trong tương lai.

Khi bạn chuẩn bị kế hoạch bằng mô -đun PL/Python, nó là tự động lưu. Đọc tài kèo tỷ số bóng đá euro hôm nay SPI (Chương 44) Để biết mô tả về ý nghĩa của điều này. TRONG đặt hàng để sử dụng hiệu quả điều này trên các chức năng gọi một nhu cầu Để 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;
plpy.con trỏ(kèo tỷ số bóng đá euro hôm nay vấn)
plpy.con trỏ(kế hoạch[,Đối số])

Theplpy.cursorHàm chấp nhận Cùng một đối số 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 tỷ số bóng đá euro hôm nay vấn hoặc đối tượng kế hoạch cùng với một danh sách các đối số có thể được sử dụng.

Đối tượng con trỏ cung cấp mộtFetchPhương thức chấp nhận tham số số nguyên và trả về kết quả sự vật. Mỗi lần bạn gọiFetch, The Đối tượng được trả về sẽ chứa hàng loạt hàng tiếp theo, không bao giờ lớn hơ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 đã cạn kiệt. Dữ kèo tỷ số bóng đá euro hôm nay được lấy theo cách đó không được trả về Kết quả là đối tượng, nhưng thay vào đó là từ điển, mỗi từ điển tương ứng với một hàng kết quả duy nhất.

Một ví dụ về hai cách xử lý dữ kèo tỷ số bóng đá euro hôm nay 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 (kế hoạch, [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ữ, sử dụngĐóngPhương pháp. Sau khi đóng, một con trỏ không thể được lấy 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ố API cơ sở dữ kèo tỷ số bóng đá euro hôm nay Python. Họ không có bất cứ điểm chung nào ngoại trừ tên.

43.7.2. Bẫy lỗi

Các chức năng kèo tỷ số bóng đá euro hôm nay có thể gặp phải lỗi sẽ khiến họ hủy bỏ và nêu ra một ngoại lệ. Cả haiplpy.executeplpy.prepareCó thể nâng cao một trường hợp 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 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 đ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, Xuất phát tên của họ từ tên điều kiện. Ví dụ,Division_by_zerotrở thànhDivisionbyzero, độc đáo_violationtrở thànhđộc đáo, FDW_ERRORtrở thànhfdwerror, v.v. Mỗi trong số này Các lớp ngoại lệ kế thừa từSpierror. Sự tách biệt này giúp xử lý các lỗi cụ thể hơn, cho ví dụ:

21187_21740

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ừmệnh đề Xử lý nó sẽ bắt bất kỳ lỗi kèo tỷ số bóng đá euro hôm nay nào.

như một cách 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ệ. Cái này thuộc tính là giá trị chuỗi chứa"SQLSTATE"Mã lỗi. Cách tiếp cận này cung cấp xấp xỉ chức năng tương tự