find[cls, idx, value] Tìm một đối tượng cơ sở dữ liệu của lớp
for row in cursor.execute["select * from example"]: print[row]0 theo chỉ mục
for row in cursor.execute["select * from example"]: print[row]1 và khóa
for row in cursor.execute["select * from example"]: print[row]2 [một lệnh gọi tuân thủ API DB]
search[cls, idx, op, value] Xác định vị trí của một đối tượng cơ sở dữ liệu của lớp
for row in cursor.execute["select * from example"]: print[row]0 trong chỉ mục idx và khóa
for row in cursor.execute["select * from example"]: print[row]2 bằng cách sử dụng thao tác
for row in cursor.execute["select * from example"]: print[row]5 [một lệnh gọi tuân thủ API DB]điểm kiểm tra [] Điểm kiểm tra con trỏ;
Một con trỏ đóng gói một truy vấn SQL và trả về kết quả. Bạn chỉ cần một con trỏ rõ ràng nếu bạn muốn biết thêm thông tin hoặc kiểm soát quá trình thực thi. Sử dụng
for row in cursor.execute["select * from example"]: print[row]1 hoặc
for row in cursor.execute["select * from example"]: print[row]2 sẽ tự động nhận được một con trỏ phía sau hậu trường
Nếu bạn cần một con trỏ, bạn nên gọi
for row in cursor.execute["select * from example"]: print[row]3 trên cơ sở dữ liệu của mình
db=apsw.Connection["databasefilename"] cursor=db.cursor[]
Một con trỏ thực thi SQL
cursor.execute["create table example[title, isbn]"]
Bạn cũng có thể đọc lại dữ liệu. Hàng được trả về dưới dạng một bộ giá trị cột
for row in cursor.execute["select * from example"]: print[row]
Có hai cách cung cấp dữ liệu cho một truy vấn. Cách thực sự tồi tệ là soạn một chuỗi
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]
Nếu có bất kỳ dấu ngoặc đơn nào trong chuỗi thì bạn sẽ có cú pháp không hợp lệ. Ngoài ra, đây là cách các cuộc tấn công SQL injection xảy ra. Thay vào đó, bạn nên sử dụng các ràng buộc
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]
Con trỏ rẻ. Sử dụng nhiều như bạn cần. Sẽ an toàn khi sử dụng chúng trên các luồng, chẳng hạn như gọi
for row in cursor.execute["select * from example"]: print[row]4 trong một luồng, chuyển con trỏ sang luồng khác rồi gọi tiếp theo. Điều duy nhất bạn không thể làm là gọi các phương thức chính xác cùng một lúc trên cùng một con trỏ trong hai luồng khác nhau - ví dụ: cố gắng gọi
for row in cursor.execute["select * from example"]: print[row]4 trong cả hai luồng cùng một lúc hoặc
for row in cursor.execute["select * from example"]: print[row]4 trong một và tiếp theo trong một luồng khác. [Nếu bạn cố gắng làm điều này, nó sẽ bị phát hiện và
for row in cursor.execute["select * from example"]: print[row]7 sẽ được nâng lên. ]
Hậu trường một
for row in cursor.execute["select * from example"]: print[row]8 ánh xạ tới một câu lệnh SQLite. APSW duy trì một bộ đệm để ánh xạ diễn ra rất nhanh và các đối tượng SQLite được sử dụng lại khi có thể.
Một tính năng độc đáo của APSW là truy vấn của bạn có thể là nhiều câu lệnh được phân tách bằng dấu chấm phẩy. Ví dụ
for row in cursor.execute["select * from example"]: print[row]3
Ghi chú
SQLite tìm nạp dữ liệu khi cần. Nếu ví dụ về bảng có 10 triệu hàng, nó sẽ chỉ nhận được hàng tiếp theo theo yêu cầu. Mã này sẽ không hoạt động như mong đợi
for row in cursor.execute["select * from example"]: print[row]4
for row in cursor.execute["select * from example"]: print[row]4 lồng nhau sẽ bắt đầu một truy vấn mới từ bỏ mọi kết quả còn lại từ con trỏ
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]0. Có hai cách để giải quyết vấn đề này. Sử dụng một con trỏ khác
for row in cursor.execute["select * from example"]: print[row]7
Bạn cũng có thể lấy tất cả các hàng ngay lập tức bằng cách điền vào danh sách
for row in cursor.execute["select * from example"]: print[row]8
Cách tiếp cận cuối cùng này được khuyến nghị vì bạn không phải lo lắng về việc cơ sở dữ liệu thay đổi trong khi thực hiện
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]1. Bạn cũng nên hiểu các giao dịch và nơi đặt ranh giới giao dịch
Ghi chú
Các con trỏ trên cùng một Kết nối không bị cô lập với nhau. Mọi thứ được thực hiện trên một con trỏ sẽ hiển thị ngay lập tức cho tất cả các Con trỏ khác trên cùng một kết nối. Điều này vẫn áp dụng nếu bạn bắt đầu giao dịch. Các kết nối được cách ly với nhau với con trỏ trên các kết nối khác không nhìn thấy các thay đổi cho đến khi chúng được cam kết.
Xem thêm
giao dịch SQLite
cam kết nguyên tử
Ví dụ về thay đổi cơ sở dữ liệu trong khi chạy một vấn đề truy vấn
điểm chuẩn
Lớp con trỏ¶
lớp Con trỏ ¶Bạn có được con trỏ bằng cách gọi
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]2Con trỏ. __iter__[bản thân. Con trỏ] → Con trỏ ¶
Con trỏ là iterators
Con trỏ. __next__[bản thân. Con trỏ] → Bất kỳ ¶Con trỏ là iterators
Con trỏ. đóng[buộc. bool = Sai] → None¶Rất ít khả năng bạn sẽ cần gọi phương thức này. Nó tồn tại vì các phiên bản SQLite cũ hơn yêu cầu tất cả hoạt động Kết nối/Con trỏ phải được giới hạn trong cùng một chuỗi. Điều này không còn là trường hợp nữa. Các con trỏ được tự động thu gom rác và khi không còn con trỏ nào sẽ cho phép kết nối được thu gom rác nếu nó không có tham chiếu nào khác
Một con trỏ sẽ mở nếu có các câu lệnh còn lại để thực thi [nếu truy vấn của bạn bao gồm nhiều câu lệnh] hoặc nếu bạn đã gọi
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]3 và không phải tất cả các liên kết trình tự đã được sử dụngThông số
force – Nếu Sai thì bạn sẽ nhận được ngoại lệ nếu còn công việc phải làm trong Con trỏ, chẳng hạn như nhiều câu lệnh hơn để thực thi, nhiều dữ liệu hơn từ chuỗi liên kết thực thi, v.v. Nếu force là True thì tất cả thông tin trạng thái và công việc còn lại sẽ bị loại bỏ một cách âm thầm
Con trỏ. kết nối. Kết nối ¶sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]4 con trỏ này đang sử dụngCon trỏ. mô tả. Tuple[Tuple[str . , str, None, None, None, None, None], ...] ¶
Dựa trên thuộc tính con trỏ DB-API, điều này trả về giống như
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]5 nhưng có thêm 5 Không có. Xem thêm APSW vấn đề 131Con trỏ. description_full. Tuple[Tuple[str . , str, str, str, str], ...] ¶
Chỉ xuất hiện nếu SQLITE_ENABLE_COLUMN_METADATA được xác định tại thời điểm biên dịch
Trả về tất cả thông tin về các cột kết quả truy vấn. Ngoài tên và kiểu đã khai báo, bạn còn nhận được tên cơ sở dữ liệu, tên bảng và tên gốc
cuộc gọisqlite3_column_name
sqlite3_column_decltype
sqlite3_column_database_name
sqlite3_column_table_name
sqlite3_column_origin_name
Được gọi với con trỏ, câu lệnh và ràng buộc cho mỗi
for row in cursor.execute["select * from example"]: print[row]4 hoặc
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]3 trên con trỏ này
Nếu có thể gọi được là Không thì bất kỳ trình theo dõi thực thi hiện có nào đều chưa được đăng ký
Xem thêm
truy tìm
Trình theo dõi thực thi
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]
8
Thực thi các câu lệnh bằng cách sử dụng các liên kết được cung cấp. Thực thi trả về khi hàng đầu tiên có sẵn hoặc tất cả các câu lệnh đã hoàn thành
Thông sốcâu lệnh – Một hoặc nhiều câu lệnh SQL như
sql="insert into example values['%s', %d]" % ["string", 8390823904] cursor.execute[sql]
9 hoặcsql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]
0bindings – Nếu được cung cấp phải là một chuỗi hoặc một từ điển. Mỗi mục phải là một trong loại được hỗ trợ
can_cache – Nếu Sai thì bộ đệm câu lệnh sẽ không được sử dụng để tìm một truy vấn đã được chuẩn bị sẵn, cũng như nó sẽ không được đặt trong bộ đệm sau khi thực hiện
Chuẩn bị_flags - cờ được chuyển đến sqlite_prepare_v3
Nếu bạn sử dụng các ràng buộc được đánh số trong truy vấn thì hãy cung cấp một chuỗi. Bất kỳ trình tự nào cũng sẽ hoạt động bao gồm danh sách và trình vòng lặp. Ví dụ
for row in cursor.execute["select * from example"]: print[row]9
Ghi chú
Một vấn đề phổ biến là muốn chèn một chuỗi nhưng không đặt nó trong một bộ dữ liệu
cursor.execute["create table example[title, isbn]"]0
Chuỗi là một chuỗi gồm 8 ký tự và do đó, có vẻ như bạn đang cung cấp 8 liên kết khi chỉ cần một liên kết. Sử dụng bộ dữ liệu một mục có dấu phẩy ở cuối như thế này
cursor.execute["create table example[title, isbn]"]1
Nếu bạn đã sử dụng tên trong câu lệnh thì hãy cung cấp từ điển làm ràng buộc. Có thể thiếu các mục trong từ điển - Không có/null sẽ được sử dụng. Ví dụ
cursor.execute["create table example[title, isbn]"]2
Trả về là chính đối tượng con trỏ cũng là một trình vòng lặp. Điều này cho phép bạn viết
cursor.execute["create table example[title, isbn]"]3tăng
TypeError – Các ràng buộc được cung cấp không phải là một lệnh cũng không phải là một chuỗi
BindingsError – Bạn đã cung cấp quá nhiều hoặc quá ít ràng buộc cho các câu lệnh
IncompleteExecutionError – Còn lại các truy vấn chưa được thực hiện từ lần thực thi cuối cùng của bạn
Xem thêm
Mô hình thực hiện
sqlite3_prepare_v3
sqlite3_step
sqlite3_bind_int64
sqlite3_bind_null
sqlite3_bind_text
sqlite3_bind_double
sqlite3_bind_blob
sqlite3_bind_zeroblob
Phương pháp này dành cho khi bạn muốn thực hiện các câu lệnh tương tự trên một chuỗi các ràng buộc. Về mặt khái niệm nó làm điều này
cursor.execute["create table example[title, isbn]"]4
Ví dụ
cursor.execute["create table example[title, isbn]"]5
Trả về là chính con trỏ hoạt động như một trình vòng lặp. Báo cáo của bạn có thể trả lại dữ liệu. Xem
for row in cursor.execute["select * from example"]: print[row]4 để biết thêm thông tinCon trỏ. expanded_sql. str ¶
Văn bản SQL với các tham số ràng buộc được mở rộng. Ví dụ
cursor.execute["create table example[title, isbn]"]6
sẽ trở lại
cursor.execute["create table example[title, isbn]"]7
Lưu ý rằng mặc dù SQLite hỗ trợ null trong chuỗi, nhưng việc triển khai sqlite3_expanded_sql của chúng dừng ở null đầu tiên
cuộc gọi. sqlite3_expanded_sql
Con trỏ. tìm nạp[] → danh sách . [Tuple[SQLiteValue, ...]] ¶Trả về tất cả các hàng kết quả còn lại dưới dạng danh sách. Phương thức này được định nghĩa trong DBAPI. Đó là một cách làm dài hơn
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]2Con trỏ. tìm nạp[] → Tùy chọn[Any]¶
Trả về hàng dữ liệu tiếp theo hoặc Không có nếu không còn hàng nào nữa
Con trỏ. nhận kết nối[] → Kết nối¶Trả về
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]3 con trỏ này đang sử dụngCon trỏ. getdescription[] → Tuple . [Tuple[str, str], ...] ¶
Nếu bạn đang cố lấy thông tin về một bảng hoặc dạng xem, thì pragma table_info sẽ tốt hơn
Trả về một bộ mô tả từng cột trong hàng kết quả. Trả về giống hệt nhau cho mọi hàng của kết quả. Bạn chỉ có thể gọi phương thức này khi bạn đã bắt đầu thực hiện một câu lệnh và trước khi bạn kết thúc
cursor.execute["create table example[title, isbn]"]8
Thông tin về mỗi cột là một bộ của
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]4. Loại là những gì đã được khai báo trong câu lệnh
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]5 - giá trị được trả về trong hàng sẽ là bất kỳ loại nào bạn đặt cho hàng và cột đó. [Đây được gọi là cách gõ bảng kê khai, đây cũng là cách mà Python hoạt động. Biến
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]6 có thể chứa một số nguyên, sau đó bạn có thể đặt một chuỗi vào đó. Các ngôn ngữ tĩnh khác như C hoặc cơ sở dữ liệu SQL khác chỉ cho phép bạn nhập một loại - ví dụ:
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]6 chỉ có thể chứa một số nguyên hoặc một chuỗi chứ không bao giờ chứa cả hai. ]
Ví dụ
cursor.execute["create table example[title, isbn]"]9
đầu ra
for row in cursor.execute["select * from example"]: print[row]0cuộc gọi
sqlite3_column_name
sqlite3_column_decltype
Trả về
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]8 hiện được cài đặt
Xem thêm
truy tìm
Trả về trình theo dõi hàng hiện được cài đặt [thông qua
sql="insert into example values[?, ?]" cursor.execute[sql, ["string", 8390823904]] # You can also use dictionaries [with colon, $, or @ before names] sql="insert into example values[:title, :isbn]" cursor.execute[sql, {"title": "string", "isbn": 8390823904}] # You can use local variables as the dictionary title="..." isbn="...." cursor.execute[sql, locals[]]9]
Xem thêm
truy tìm
Trả về 0 nếu thực hiện truy vấn thông thường, 1 nếu đó là truy vấn GIẢI THÍCH và 2 nếu truy vấn KẾ HOẠCH GIẢI THÍCH QUERY
cuộc gọi. sqlite3_stmt_isexplain
Con trỏ. is_readonly. bool ¶Trả về True nếu truy vấn hiện tại không thay đổi cơ sở dữ liệu
Lưu ý rằng các chức năng được gọi, bảng ảo, v.v. có thể thực hiện các thay đổi mặc dù
cuộc gọi. sqlite3_stmt_readonly
Con trỏ. vạch hàng. Tùy chọn[Trình theo dõi hàng] ¶Được gọi với con trỏ và hàng được trả về. Bạn có thể thay đổi dữ liệu được trả về hoặc khiến hàng bị bỏ qua hoàn toàn