Làm cách nào để sử dụng con trỏ trong SQL Python?

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]
2

Con 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ụng

Thô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ụng

Con 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 đề 131

Con 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ọi
  • sqlite3_column_name

  • sqlite3_column_decltype

  • sqlite3_column_database_name

  • sqlite3_column_table_name

  • sqlite3_column_origin_name

Con trỏ. exectrace. Tùy chọn[ExecTracer]

Đượ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

Con trỏ. thực thi[câu lệnh. str , ràng buộc. Tùy chọn[Ràng buộc] = . None, *, can_cache: bool = True , prepare_flags . : int = 0] Cursor

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ặ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[]]
    
    0

  • bindings – 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]"]
3

tă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

cuộc gọi
  • sqlite3_prepare_v3

  • sqlite3_step

  • sqlite3_bind_int64

  • sqlite3_bind_null

  • sqlite3_bind_text

  • sqlite3_bind_double

  • sqlite3_bind_blob

  • sqlite3_bind_zeroblob

Con trỏ. thực thi[câu lệnh. str , sequenceofbindings. Trình tự[Ràng buộc] , . *, can_cache: bool = True , prepare_flags . : int = 0] Cursor

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 tin

Con 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[]]
2

Con 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ụng

Con 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]
0

cuộc gọi
  • sqlite3_column_name

  • sqlite3_column_decltype

Con trỏ. getexectrace[] Tùy chọn[ExecTracer]

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

Con trỏ. getrowtrace[] Tùy chọn[RowTracer]

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

Con trỏ. is_explain. int

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

Làm cách nào để sử dụng con trỏ Python?

Con trỏ là đối tượng giúp thực hiện truy vấn và tìm nạp các bản ghi từ cơ sở dữ liệu. Con trỏ đóng vai trò rất quan trọng trong việc thực hiện câu truy vấn. . Loại trả lại

Làm cách nào để lấy dữ liệu từ con trỏ trong Python?

Các bước sử dụng fetchone[] trong Mysql bằng Python. Tiếp theo, tạo đối tượng con trỏ bằng phương thức cursor[] . Bây giờ hãy tạo và thực hiện truy vấn bằng cách sử dụng câu lệnh “SELECT *” với phương thức exec[] để truy xuất dữ liệu . Sử dụng phương thức fetchone[] trên biến kết quả. in kết quả.

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.

Con trỏ thực thi trong SQL là gì?

Con trỏ đóng gói 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 kết nối. thực thi [] hoặc kết nối.

Chủ Đề