Làm cách nào để kiểm tra xem con trỏ có rỗng không python?

Cho phép mã Python thực thi lệnh PostgreSQL trong phiên cơ sở dữ liệu. Con trỏ được tạo bằng phương thức. chúng bị ràng buộc với kết nối trong suốt thời gian tồn tại và tất cả các lệnh được thực thi trong ngữ cảnh của phiên cơ sở dữ liệu được bao bọc bởi kết nối

Các con trỏ được tạo từ cùng một kết nối không bị cô lập, tôi. e. , mọi thay đổi được thực hiện đối với cơ sở dữ liệu bởi một con trỏ sẽ được hiển thị ngay lập tức bởi các con trỏ khác. Các con trỏ được tạo từ các kết nối khác nhau có thể hoặc không thể bị cô lập, tùy thuộc vào các kết nối '. Xem thêm và phương pháp

Con trỏ không phải là chủ đề an toàn. một ứng dụng đa luồng có thể tạo nhiều con trỏ từ cùng một kết nối và nên sử dụng từng con trỏ từ một luồng. Xem để biết chi tiết

Con trỏ có thể được sử dụng làm trình quản lý ngữ cảnh. rời khỏi bối cảnh sẽ đóng con trỏ

with conn.cursor[] as curs:
    curs.execute[SQL]

# the cursor is now closed

sự miêu tả

Thuộc tính chỉ đọc mô tả kết quả của truy vấn. Đó là một chuỗi các trường hợp, mỗi trường hợp mô tả một cột kết quả theo thứ tự. Thuộc tính là

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9 cho các thao tác không trả về hàng hoặc nếu con trỏ chưa có thao tác được gọi thông qua các phương thức

Để tương thích với DB-API, mọi đối tượng có thể được giải nén dưới dạng chuỗi 7 mục. các thuộc tính trả lại theo cách này là như sau. Để biết thêm chi tiết và các thuộc tính khác có sẵn, hãy kiểm tra tài liệu

  1. tên của cột được trả về

  2. PostgreSQL OID của cột

  3. độ dài thực tế của cột tính bằng byte

  4. kích thước tính bằng byte của cột được liên kết với cột này trên máy chủ

  5. tổng số chữ số có nghĩa trong các cột loại

    >>> cur.mogrify["INSERT INTO test [num, data] VALUES [%s, %s]", [42, 'bar']]
    "INSERT INTO test [num, data] VALUES [42, E'bar']"
    
    7.
    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    9 cho các loại khác

  6. đếm các chữ số thập phân ở phần phân số trong các cột kiểu

    >>> cur.mogrify["INSERT INTO test [num, data] VALUES [%s, %s]", [42, 'bar']]
    "INSERT INTO test [num, data] VALUES [42, E'bar']"
    
    7.
    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    9 cho các loại khác

  7. luôn luôn

    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    9 vì không dễ truy xuất từ ​​libpq

Đã thay đổi trong phiên bản 2. 4. nếu có thể, mô tả cột được đặt tên là bộ thay vì bộ thông thường.

Đã thay đổi trong phiên bản 2. 8. mô tả cột là trường hợp của

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
8, hiển thị các thuộc tính bổ sung.

đóng[]

Đóng con trỏ ngay bây giờ [chứ không phải bất cứ khi nào

>>> cur.execute["SELECT * FROM test;"]
>>> for record in cur:
..     print record
...
[1, 100, "abc'def"]
[2, None, 'dada']
[3, 42, 'bar']
5 được thực thi]. Con trỏ sẽ không sử dụng được từ thời điểm này trở đi;

Đã thay đổi trong phiên bản 2. 5. nếu con trỏ được sử dụng trong câu lệnh

>>> cur.execute["SELECT * FROM test;"]
>>> for record in cur:
..     print record
...
[1, 100, "abc'def"]
[2, None, 'dada']
[3, 42, 'bar']
7, thì phương thức này sẽ tự động được gọi ở cuối khối
>>> cur.execute["SELECT * FROM test;"]
>>> for record in cur:
..     print record
...
[1, 100, "abc'def"]
[2, None, 'dada']
[3, 42, 'bar']
7.

đóng cửa

Thuộc tính boolean chỉ đọc. chỉ định nếu con trỏ đóng [

>>> cur.execute["SELECT * FROM test;"]
>>> for record in cur:
..     print record
...
[1, 100, "abc'def"]
[2, None, 'dada']
[3, 42, 'bar']
9] hay không [
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
20]

Tiện ích mở rộng API DB

Thuộc tính là một phần mở rộng Psycopg cho DB API 2. 0

Mới trong phiên bản 2. 0. 7

sự liên quan

Thuộc tính chỉ đọc trả về tham chiếu đến đối tượng mà con trỏ được tạo

Tên

Thuộc tính chỉ đọc chứa tên của con trỏ nếu nó được tạo dưới dạng con trỏ có tên bởi , hoặc

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9 nếu đó là con trỏ phía máy khách. Thấy

Tiện ích mở rộng API DB

Thuộc tính là một phần mở rộng Psycopg cho DB API 2. 0

cuộn được

Thuộc tính đọc/ghi. chỉ định nếu một con trỏ được đặt tên được khai báo là

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
26, do đó có khả năng cuộn ngược lại [sử dụng]. Nếu
>>> cur.execute["SELECT * FROM test;"]
>>> for record in cur:
..     print record
...
[1, 100, "abc'def"]
[2, None, 'dada']
[3, 42, 'bar']
9, con trỏ có thể cuộn ngược lại, nếu
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
20 thì không bao giờ cuộn được. Nếu
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9 [mặc định], tùy chọn cuộn con trỏ không được chỉ định, thông thường nhưng không phải lúc nào cũng có nghĩa là không cuộn lùi [xem phần ]

Ghi chú

đặt giá trị trước khi gọi hoặc sử dụng tham số có thể cuộn, nếu không giá trị sẽ không có hiệu lực

Mới trong phiên bản 2. 5

Tiện ích mở rộng API DB

Thuộc tính là một phần mở rộng Psycopg cho DB API 2. 0

giữ lại

Thuộc tính đọc/ghi. chỉ định xem thời gian tồn tại của con trỏ được đặt tên có nên mở rộng ra bên ngoài giao dịch hiện tại hay không, i. e. , có thể tìm nạp từ con trỏ ngay cả sau a [chứ không phải sau a ]. Thấy

Ghi chú

đặt giá trị trước khi gọi hoặc sử dụng tham số giữ lại, nếu không giá trị sẽ không có hiệu lực

Mới trong phiên bản 2. 4. 3

Tiện ích mở rộng API DB

Thuộc tính là một phần mở rộng Psycopg cho DB API 2. 0

Các phương thức thực hiện lệnh

thực thi[truy vấn , vars=Không có]

Thực hiện một hoạt động cơ sở dữ liệu [truy vấn hoặc lệnh]

Các tham số có thể được cung cấp dưới dạng trình tự hoặc ánh xạ và sẽ được liên kết với các biến trong thao tác. Các biến được chỉ định với các trình giữ chỗ vị trí [

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
80] hoặc được đặt tên [
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
81]. Thấy

Phương thức trả về

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9. Nếu một truy vấn đã được thực thi, các giá trị được trả về có thể được truy xuất bằng các phương thức

executemany[truy vấn , vars_list]

Thực thi một thao tác cơ sở dữ liệu [truy vấn hoặc lệnh] đối với tất cả các bộ tham số hoặc ánh xạ được tìm thấy trong chuỗi vars_list

Chức năng này chủ yếu hữu ích cho các lệnh cập nhật cơ sở dữ liệu. bất kỳ tập kết quả nào được trả về bởi truy vấn đều bị loại bỏ

Các tham số được giới hạn cho truy vấn bằng cách sử dụng cùng một quy tắc được mô tả trong phương thức

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]

Cảnh báo

Trong triển khai hiện tại, phương thức này không nhanh hơn thực thi trong một vòng lặp. Để có hiệu suất tốt hơn, bạn có thể sử dụng các chức năng được mô tả trong

callproc[procname[ , tham số]]

Gọi một thủ tục cơ sở dữ liệu được lưu trữ với tên đã cho. Chuỗi tham số phải chứa một mục nhập cho mỗi đối số mà thủ tục mong đợi. Thủ tục quá tải được hỗ trợ. Có thể sử dụng các tham số được đặt tên bằng cách cung cấp các tham số dưới dạng từ điển

Hiện tại, chức năng này không tuân thủ DBAPI. Giá trị trả về được cho là bao gồm chuỗi các tham số với các tham số đầu ra và đầu vào/đầu ra đã được sửa đổi. Trong các phiên bản sau này, giá trị trả về tuân thủ DBAPI có thể được triển khai, nhưng hiện tại hàm trả về Không có

Thủ tục có thể cung cấp một tập kết quả như đầu ra. Điều này sau đó được cung cấp thông qua các phương pháp tiêu chuẩn

Đã thay đổi trong phiên bản 2. 7. đã thêm hỗ trợ cho các đối số được đặt tên.

Ghi chú

Chỉ có thể sử dụng

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
87 với các hàm PostgreSQL, không phải với các thủ tục được giới thiệu trong PostgreSQL 11, vốn yêu cầu câu lệnh
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
88 để chạy. Vui lòng sử dụng bình thường để chạy chúng

mogrify[hoạt động[ , tham số]]

Trả về chuỗi truy vấn sau khi liên kết đối số. Chuỗi được trả về chính xác là chuỗi sẽ được gửi đến cơ sở dữ liệu đang chạy phương thức hoặc tương tự

Chuỗi trả về luôn là chuỗi byte

>>> cur.mogrify["INSERT INTO test [num, data] VALUES [%s, %s]", [42, 'bar']]
"INSERT INTO test [num, data] VALUES [42, E'bar']"

Tiện ích mở rộng API DB

Phương pháp này là một phần mở rộng Psycopg cho DB API 2. 0

setinputsizes[kích thước]

Phương pháp này được hiển thị tuân thủ DB API 2. 0. Hiện tại nó không làm gì nhưng có thể gọi nó là an toàn

Phương pháp truy xuất kết quả

Các phương pháp sau đây được sử dụng để đọc dữ liệu từ cơ sở dữ liệu sau một cuộc gọi

Ghi chú

các đối tượng có thể lặp lại, vì vậy, thay vì gọi một cách rõ ràng trong một vòng lặp, chính đối tượng đó có thể được sử dụng

________số 8

Đã thay đổi trong phiên bản 2. 4. lặp đi lặp lại một lần tìm nạp các bản ghi từ chương trình phụ trợ. Trước đây, chỉ có một bản ghi được tìm nạp trên mỗi vòng, dẫn đến chi phí lớn.

tìm nạp[]

Tìm nạp hàng tiếp theo của tập kết quả truy vấn, trả về một bộ hoặc

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9 khi không có thêm dữ liệu

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
2

A được nâng lên nếu lệnh gọi trước đó không tạo ra bất kỳ tập kết quả nào hoặc chưa có lệnh gọi nào được đưa ra

fetchmany[[size=con trỏ. kích thước mảng]]

Tìm nạp tập hợp hàng tiếp theo của kết quả truy vấn, trả về danh sách các bộ dữ liệu. Một danh sách trống được trả về khi không còn hàng nào nữa

Số lượng hàng cần tìm nạp trên mỗi cuộc gọi được chỉ định bởi tham số. Nếu nó không được cung cấp, con trỏ sẽ xác định số lượng hàng sẽ được tìm nạp. Phương thức sẽ cố gắng tìm nạp nhiều hàng như được chỉ định bởi tham số kích thước. Nếu điều này là không thể do số lượng hàng đã chỉ định không có sẵn, thì có thể trả về ít hàng hơn

>>> cur.mogrify["INSERT INTO test [num, data] VALUES [%s, %s]", [42, 'bar']]
"INSERT INTO test [num, data] VALUES [42, E'bar']"
8

A được nâng lên nếu lệnh gọi trước đó không tạo ra bất kỳ tập kết quả nào hoặc chưa có lệnh gọi nào được đưa ra

Lưu ý rằng có những cân nhắc về hiệu suất liên quan đến tham số kích thước. Để có hiệu suất tối ưu, cách tốt nhất là sử dụng thuộc tính. Nếu tham số kích thước được sử dụng, thì tốt nhất là giữ nguyên giá trị từ lần gọi này sang lần gọi tiếp theo

tìm nạp[]

Tìm nạp tất cả các hàng [còn lại] của kết quả truy vấn, trả về chúng dưới dạng danh sách các bộ dữ liệu. Một danh sách trống được trả về nếu không còn bản ghi nào để tìm nạp

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
8

A được nâng lên nếu lệnh gọi trước đó không tạo ra bất kỳ tập kết quả nào hoặc chưa có lệnh gọi nào được đưa ra

cuộn[giá trị[ , mode='relative']]

Di chuyển con trỏ trong tập kết quả đến vị trí mới theo chế độ

Nếu

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
06 là
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
07 [mặc định], giá trị được lấy làm phần bù cho vị trí hiện tại trong tập hợp kết quả, nếu được đặt thành
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
08, giá trị cho biết vị trí mục tiêu tuyệt đối

Nếu thao tác cuộn sẽ rời khỏi tập hợp kết quả, a sẽ được nâng lên và vị trí con trỏ không bị thay đổi

Ghi chú

Theo API DB 2. 0, ngoại lệ được đưa ra cho một con trỏ nằm ngoài giới hạn phải là

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
30. Tùy chọn tốt nhất có lẽ là bắt cả hai ngoại lệ trong mã của bạn

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
4

Phương pháp này có thể được sử dụng cho cả con trỏ phía máy khách và. Con trỏ phía máy chủ thường chỉ có thể cuộn ngược nếu được khai báo. Di chuyển ra khỏi giới hạn trong con trỏ phía máy chủ không dẫn đến ngoại lệ, nếu phần phụ trợ không tăng bất kỳ [Postgres không cho chúng tôi biết một cách đáng tin cậy nếu chúng tôi vượt quá giới hạn]

kích thước mảng

Thuộc tính đọc/ghi này chỉ định số lượng hàng cần tìm nạp tại một thời điểm với. Nó mặc định là 1 có nghĩa là tìm nạp một hàng tại một thời điểm

lặp đi lặp lại

Thuộc tính đọc/ghi chỉ định số lượng hàng cần tìm nạp từ phần phụ trợ ở mỗi vòng lặp mạng trong một. Mặc định là 2000

Mới trong phiên bản 2. 4

Tiện ích mở rộng API DB

Thuộc tính là một phần mở rộng Psycopg cho DB API 2. 0

đếm số hàng

Thuộc tính chỉ đọc này chỉ định số hàng được tạo lần cuối [đối với các câu lệnh DQL như

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
35] hoặc bị ảnh hưởng [đối với các câu lệnh DML như
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
36 hoặc
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
37]

Thuộc tính là -1 trong trường hợp không có

>>> cur.mogrify["INSERT INTO test [num, data] VALUES [%s, %s]", [42, 'bar']]
"INSERT INTO test [num, data] VALUES [42, E'bar']"
0 nào được thực hiện trên con trỏ hoặc số hàng của thao tác cuối cùng nếu giao diện không thể xác định được

Ghi chú

API cơ sở dữ liệu 2. 0 dự trữ để xác định lại trường hợp sau để có đối tượng trả về

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9 thay vì -1 trong các phiên bản tương lai của thông số kỹ thuật

số lượng hàng

Thuộc tính chỉ đọc này cung cấp chỉ mục dựa trên 0 hiện tại của con trỏ trong tập kết quả hoặc

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9 nếu không thể xác định chỉ mục

Chỉ mục có thể được coi là chỉ mục của con trỏ trong một chuỗi [tập hợp kết quả]. Thao tác tìm nạp tiếp theo sẽ tìm nạp hàng được lập chỉ mục theo trình tự đó

cuối cùng

Thuộc tính chỉ đọc này cung cấp OID của hàng cuối cùng được con trỏ chèn vào. Nếu bảng không được tạo với hỗ trợ OID hoặc thao tác cuối cùng không phải là một lần chèn bản ghi, thì thuộc tính được đặt thành

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9

Ghi chú

PostgreSQL hiện khuyên không nên tạo OID trên các bảng và mặc định cho

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
03 là không hỗ trợ chúng. Cú pháp
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
04 có sẵn từ PostgreSQL 8. 3 cho phép linh hoạt hơn

truy vấn

Thuộc tính chỉ đọc chứa nội dung của truy vấn cuối cùng được gửi tới phần phụ trợ [bao gồm cả các đối số bị ràng buộc] dưới dạng chuỗi byte.

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
9 nếu chưa có truy vấn nào được thực hiện

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
0

Tiện ích mở rộng API DB

Thuộc tính là một phần mở rộng Psycopg cho DB API 2. 0

thông báo trạng thái

Thuộc tính chỉ đọc chứa thông báo được trả về bởi lệnh cuối cùng

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
3

Tiện ích mở rộng API DB

Thuộc tính là một phần mở rộng Psycopg cho DB API 2. 0

truyền[oid , s]

Chuyển đổi một giá trị từ biểu diễn chuỗi PostgreSQL sang đối tượng Python

Sử dụng cụ thể nhất của typecasters đăng ký bởi

Mới trong phiên bản 2. 4

Tiện ích mở rộng API DB

Phương pháp này là một phần mở rộng Psycopg cho DB API 2. 0

tzinfo_factory

Nhà máy múi giờ được sử dụng để xử lý các loại dữ liệu như

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
10. Nó phải là một đối tượng. Mặc định là

Đã thay đổi trong phiên bản 2. 9. trước đây nhà máy mặc định là.

tập tiếp theo[]

Phương pháp này không được hỗ trợ [PostgreSQL không có nhiều bộ dữ liệu] và sẽ đưa ra một ngoại lệ

setoutputsize[kích thước[ , cột]]

Phương pháp này được hiển thị tuân thủ DB API 2. 0. Hiện tại nó không làm gì nhưng có thể gọi nó là an toàn

các phương pháp liên quan đến SAO CHÉP

Sao chép dữ liệu hiệu quả từ các đối tượng giống như tệp vào cơ sở dữ liệu và ngược lại. Xem để có cái nhìn tổng quan

Tiện ích mở rộng API DB

Lệnh

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
15 là một phần mở rộng PostgreSQL cho tiêu chuẩn SQL. Như vậy, hỗ trợ của nó là một phần mở rộng Psycopg cho DB API 2. 0

copy_from[tệp , bảng , sep='\\t' , null='\\\\N' , size=8192 , cột=Không có]

Đọc dữ liệu từ tệp đối tượng giống như tệp nối thêm chúng vào bảng có tên bảng

Thông số
  • tệp – đối tượng giống như tệp để đọc dữ liệu từ. Nó phải có cả hai phương thức

    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    16 và
    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    17

  • table – tên của bảng để sao chép dữ liệu vào

  • sep – dấu tách cột dự kiến ​​trong tệp. Mặc định cho một tab

  • null – đại diện bằng văn bản của

    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    18 trong tệp. Mặc định là chuỗi hai ký tự
    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    19

  • kích thước - kích thước của bộ đệm được sử dụng để đọc từ tệp

  • cột – có thể lặp lại với tên của các cột để nhập. Độ dài và các loại phải phù hợp với nội dung của tệp để đọc. Nếu không được chỉ định, giả định rằng toàn bộ bảng khớp với cấu trúc tệp

Thí dụ

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
0

Đã thay đổi trong phiên bản 2. 0. 6. đã thêm tham số cột.

Đã thay đổi trong phiên bản 2. 4. dữ liệu đọc từ các tệp triển khai giao diện được mã hóa trong kết nối khi được gửi đến phần phụ trợ.

Đã thay đổi trong phiên bản 2. 9. tên bảng và trường hiện là dấu ngoặc kép. Nếu bạn cần chỉ định một bảng đủ điều kiện lược đồ, vui lòng sử dụng.

copy_to[tệp , bảng , sep='\\t' , null='\\\\N' , cột=Không có]

Ghi nội dung của bảng có tên bảng vào tệp đối tượng dạng tệp. Xem để có cái nhìn tổng quan

Thông số
  • tệp – đối tượng giống như tệp để ghi dữ liệu vào. Nó phải có phương thức

    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    23

  • table – tên của bảng để sao chép dữ liệu từ

  • sep – dấu tách cột dự kiến ​​trong tệp. Mặc định cho một tab

  • null – đại diện bằng văn bản của

    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    18 trong tệp. Mặc định là chuỗi hai ký tự
    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    19

  • cột – có thể lặp lại với tên của các cột để xuất. Nếu không được chỉ định, hãy xuất tất cả các cột

Thí dụ

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
1

Đã thay đổi trong phiên bản 2. 0. 6. đã thêm tham số cột.

Đã thay đổi trong phiên bản 2. 4. dữ liệu được gửi đến các tệp triển khai giao diện được giải mã trong kết nối khi được đọc từ phần phụ trợ.

Đã thay đổi trong phiên bản 2. 9. tên bảng và trường hiện là dấu ngoặc kép. Nếu bạn cần chỉ định một bảng đủ điều kiện lược đồ, vui lòng sử dụng.

copy_expert[sql , tệp , size=8192]

Gửi tuyên bố

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
15 do người dùng soạn. Phương pháp này rất hữu ích để xử lý tất cả các tham số mà PostgreSQL cung cấp [xem tài liệu về lệnh
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
15]

Thông số
  • sql – câu lệnh

    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    15 để thực thi

  • tệp – một đối tượng giống như tệp để đọc hoặc ghi [theo sql]

  • size – kích thước của bộ đệm đọc được sử dụng trong

    >>> nums = [[1,], [5,], [10,]]
    >>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]
    
    >>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
    >>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
    
    32

Câu lệnh sql phải ở dạng

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
33 để xuất
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
34 sang đối tượng tệp được truyền dưới dạng đối số hoặc
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
35 để nhập nội dung của đối tượng tệp vào
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
34. Nếu bạn cần soạn động một câu lệnh
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
15 [vì các tham số bảng, trường hoặc truy vấn nằm trong các biến Python], bạn có thể sử dụng các đối tượng do mô-đun cung cấp

tệp phải là một đối tượng giống như tệp có thể đọc được [theo yêu cầu của ] đối với câu lệnh sql

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
40 hoặc đối tượng có thể ghi [theo yêu cầu của ] đối với
>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
42

Thí dụ

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
2

Mới trong phiên bản 2. 0. 6

Đã thay đổi trong phiên bản 2. 4. các tệp triển khai giao diện được xử lý bằng cách sử dụng dữ liệu Unicode thay vì byte.

Tương tác với các mô-đun C API khác

pgresult_ptr

Trả lại giá trị bên trong của con trỏ

>>> nums = [[1,], [5,], [10,]]
>>> cur.executemany["INSERT INTO test [num] VALUES [%s]", nums]

>>> tuples = [[123, "foo"], [42, "bar"], [23, "baz"]]
>>> cur.executemany["INSERT INTO test [num, data] VALUES [%s, %s]", tuples]
44 dưới dạng số nguyên. Hữu ích để chuyển cấu trúc kết quả thô libpq cho các hàm C, e. g. qua

Việc sử dụng con trỏ thực thi [] trong Python sẽ như thế nào?

execute[]. Phương thức này thực thi thao tác cơ sở dữ liệu đã cho [truy vấn hoặc lệnh] . Các tham số được tìm thấy trong tuple hoặc tham số từ điển được liên kết với các biến trong hoạt động.

Fetchall trả về gì trong Python?

fetchall[]. Phương thức tìm nạp tất cả [hoặc tất cả các hàng còn lại] của tập kết quả truy vấn và trả về danh sách các bộ . Nếu không còn hàng nào nữa, nó sẽ trả về một danh sách trống.

Rowcount trong Python là gì?

số hàng. Thuộc tính chỉ đọc này trả về số hàng được trả về cho câu lệnh SELECT hoặc số hàng bị ảnh hưởng bởi câu lệnh DML chẳng hạn như INSERT hoặc UPDATE .

Chủ Đề