Cách nhập dữ liệu vào sqlite bằng python

SQLite là một thư viện ngôn ngữ C triển khai một công cụ cơ sở dữ liệu SQL nhỏ, nhanh, khép kín, có độ tin cậy cao, đầy đủ tính năng. SQLite là công cụ cơ sở dữ liệu được sử dụng nhiều nhất trên thế giới. Chúng ta sẽ thảo luận về cách tận dụng Python để tải dữ liệu trong tệp json, MS Excel và MS Access vào Teradata

Python là ngôn ngữ hoàn hảo cho nhiệm vụ này vì nó có các thư viện tuyệt vời cho Khung dữ liệu sqlite và CSV

Tạo cơ sở dữ liệu sqlite

sqlite là một cơ sở dữ liệu nhẹ có thể bắt đầu dưới dạng một tệp văn bản trống. Bạn có thể tạo tệp bằng

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
1 hoặc bằng mã Python tương đương này

from pathlib import Path
Path['my_data.db'].touch[]

Tệp văn bản 0 byte là điểm khởi đầu tuyệt vời cho cơ sở dữ liệu nhẹ

Tạo bảng sqlite

Tạo kết nối cơ sở dữ liệu và con trỏ để thực hiện truy vấn

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]

Thực hiện một truy vấn sẽ tạo một bảng

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
2 với các cột
import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
3 và
import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
4

c.execute['''CREATE TABLE users [user_id int, username text]''']

Tải tệp CSV vào bảng sqlite

Giả sử bạn có tệp

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
5 sau

________số 8_______

Pandas giúp dễ dàng tải dữ liệu CSV này vào bảng sqlite

import pandas as pd

# load the data into a Pandas DataFrame
users = pd.read_csv['users.csv']
# write the data to a sqlite table
users.to_sql['users', conn, if_exists='append', index = False]

Phương thức

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
6 giúp dễ dàng ghi DataFrames vào cơ sở dữ liệu

Lấy các giá trị từ bảng sqlite

Lấy tất cả các hàng từ bảng

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
2

c.execute['''SELECT * FROM users'''].fetchall[] # [[1, 'pokerkid'], [2, 'crazyken']]

Phương thức

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
8 trả về một mảng các bộ dữ liệu

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
9 trả về một đối tượng
c.execute['''CREATE TABLE users [user_id int, username text]''']
0. Con trỏ có thể được coi là trình vòng lặp trong thế giới cơ sở dữ liệu

Tải một CSV khác vào cơ sở dữ liệu

Giả sử bạn có tệp

c.execute['''CREATE TABLE users [user_id int, username text]''']
1 sau đây

order_id,user_id,item_name
1,1,speaker
2,1,phone
3,2,spoon
4,2,fork
5,2,speaker

Tạo một bảng và sau đó tải dữ liệu đơn đặt hàng vào cơ sở dữ liệu

c.execute['''CREATE TABLE orders [order_id int, user_id int, item_name text]''']
orders = pd.read_csv['orders.csv'] # load to DataFrame
orders.to_sql['orders', conn, if_exists='append', index = False] # write to sqlite table

Tìm nạp kết quả tham gia cơ sở dữ liệu

Tham gia các bảng

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
2 và
c.execute['''CREATE TABLE users [user_id int, username text]''']
3 trên giá trị
import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
3 và in kết quả

c.execute['''SELECT * FROM users u LEFT JOIN orders o ON u.user_id = o.user_id''']
c.fetchall[]

Đây là mảng được trả về

[[1, 'pokerkid', 1, 1, 'speaker'],
 [1, 'pokerkid', 2, 1, 'phone'],
 [2, 'crazyken', 3, 2, 'spoon'],
 [2, 'crazyken', 4, 2, 'fork'],
 [2, 'crazyken', 5, 2, 'speaker']]

Bạn cũng có thể đọc truy vấn SQL trực tiếp vào Khung dữ liệu Pandas

import sqlite3

conn = sqlite3.connect['my_data.db']
c = conn.cursor[]
0

Bước tiếp theo

Thư viện sqlite xây dựng trong Python kết hợp với Pandas DataFrames giúp dễ dàng tải dữ liệu CSV vào cơ sở dữ liệu sqlite

cơ sở dữ liệu sqlite rất tốt cho thử nghiệm cục bộ và được sử dụng rộng rãi trên điện thoại di động. Đó là một cơ sở dữ liệu tuyệt vời khi bạn thích chức năng truy vấn cơ sở dữ liệu quan hệ mà không cần đến Postgres

SQLite là thư viện C cung cấp cơ sở dữ liệu dựa trên đĩa nhẹ, không yêu cầu quy trình máy chủ riêng biệt và cho phép truy cập cơ sở dữ liệu bằng một biến thể không chuẩn của ngôn ngữ truy vấn SQL. Một số ứng dụng có thể sử dụng SQLite để lưu trữ dữ liệu nội bộ. Cũng có thể tạo nguyên mẫu một ứng dụng bằng SQLite và sau đó chuyển mã sang cơ sở dữ liệu lớn hơn như PostgreSQL hoặc Oracle

Mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 được viết bởi Gerhard Häring. Nó cung cấp một giao diện SQL tương thích với DB-API 2. 0 được mô tả bởi PEP 249 và yêu cầu SQLite 3. 7. 15 hoặc mới hơn

Tài liệu này bao gồm bốn phần chính

  • dạy cách sử dụng mô-đun

    cur.execute["""
        INSERT INTO movie VALUES
            ['Monty Python and the Holy Grail', 1975, 8.2],
            ['And Now for Something Completely Different', 1971, 7.5]
    """]
    
    0

  • mô tả các lớp và chức năng mà mô-đun này định nghĩa

  • chi tiết làm thế nào để xử lý các nhiệm vụ cụ thể

  • cung cấp nền tảng chuyên sâu về kiểm soát giao dịch

Xem thêm

https. //www. sqlite. tổ chức

Trang web SQLite;

https. //www. w3schools. com/sql/

Hướng dẫn, tài liệu tham khảo và ví dụ để học cú pháp SQL

PEP 249 - Đặc tả API cơ sở dữ liệu 2. 0

PEP được viết bởi Marc-André Lemburg

hướng dẫn

Trong hướng dẫn này, bạn sẽ tạo cơ sở dữ liệu phim Monty Python bằng cách sử dụng chức năng

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 cơ bản. Nó giả định một sự hiểu biết cơ bản về các khái niệm cơ sở dữ liệu, bao gồm con trỏ và giao dịch

Đầu tiên, chúng ta cần tạo một cơ sở dữ liệu mới và mở một kết nối cơ sở dữ liệu để cho phép

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 làm việc với nó. Gọi đến để tạo kết nối đến cơ sở dữ liệu
cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
6 trong thư mục làm việc hiện tại, tạo ngầm nếu nó không tồn tại

import sqlite3
con = sqlite3.connect["tutorial.db"]

Đối tượng được trả về

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
8 đại diện cho kết nối với cơ sở dữ liệu trên đĩa

Để thực thi các câu lệnh SQL và tìm nạp kết quả từ các truy vấn SQL, chúng ta sẽ cần sử dụng một con trỏ cơ sở dữ liệu. Gọi để tạo

cur = con.cursor[]

Bây giờ chúng ta đã có kết nối cơ sở dữ liệu và con trỏ, chúng ta có thể tạo bảng cơ sở dữ liệu

con.commit[]
1 với các cột cho tiêu đề, năm phát hành và điểm đánh giá. Để đơn giản, chúng ta chỉ cần sử dụng tên cột trong khai báo bảng – nhờ tính năng gõ linh hoạt của SQLite, việc chỉ định kiểu dữ liệu là tùy chọn. Thực hiện câu lệnh
con.commit[]
2 bằng cách gọi

cur.execute["CREATE TABLE movie[title, year, score]"]

Chúng tôi có thể xác minh rằng bảng mới đã được tạo bằng cách truy vấn bảng

con.commit[]
4 được tích hợp sẵn trong SQLite, hiện sẽ chứa mục nhập cho định nghĩa bảng
con.commit[]
1 [xem Bảng lược đồ để biết chi tiết]. Thực hiện truy vấn đó bằng cách gọi , gán kết quả cho
con.commit[]
7 và gọi để tìm nạp hàng kết quả

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]

Chúng ta có thể thấy rằng bảng đã được tạo, khi truy vấn trả về một chứa tên của bảng. Nếu chúng tôi truy vấn

con.commit[]
4 cho một bảng không tồn tại
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
1, thì
con.commit[]
8 sẽ trả về
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True

Bây giờ, hãy thêm hai hàng dữ liệu được cung cấp dưới dạng ký tự SQL bằng cách thực hiện câu lệnh

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
4, một lần nữa bằng cách gọi

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]

Câu lệnh

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
4 ngầm mở một giao dịch, giao dịch này cần được cam kết trước khi các thay đổi được lưu vào cơ sở dữ liệu [xem để biết chi tiết]. Gọi đối tượng kết nối để thực hiện giao dịch

con.commit[]

Chúng tôi có thể xác minh rằng dữ liệu đã được chèn chính xác bằng cách thực hiện truy vấn

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
8. Sử dụng phương thức hiện đã quen thuộc để gán kết quả cho
con.commit[]
7 và gọi để trả về tất cả các hàng kết quả

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]

Kết quả là một trong hai

con.commit[]
9, mỗi hàng một hàng, mỗi hàng chứa giá trị
data = [
    ["Monty Python Live at the Hollywood Bowl", 1982, 7.9],
    ["Monty Python's The Meaning of Life", 1983, 7.5],
    ["Monty Python's Life of Brian", 1979, 8.0],
]
cur.executemany["INSERT INTO movie VALUES[?, ?, ?]", data]
con.commit[]  # Remember to commit the transaction after executing INSERT.
4 của hàng đó

Bây giờ, chèn thêm ba hàng bằng cách gọi

data = [
    ["Monty Python Live at the Hollywood Bowl", 1982, 7.9],
    ["Monty Python's The Meaning of Life", 1983, 7.5],
    ["Monty Python's Life of Brian", 1979, 8.0],
]
cur.executemany["INSERT INTO movie VALUES[?, ?, ?]", data]
con.commit[]  # Remember to commit the transaction after executing INSERT.

Lưu ý rằng trình giữ chỗ

data = [
    ["Monty Python Live at the Hollywood Bowl", 1982, 7.9],
    ["Monty Python's The Meaning of Life", 1983, 7.5],
    ["Monty Python's Life of Brian", 1979, 8.0],
]
cur.executemany["INSERT INTO movie VALUES[?, ?, ?]", data]
con.commit[]  # Remember to commit the transaction after executing INSERT.
6 được sử dụng để liên kết
data = [
    ["Monty Python Live at the Hollywood Bowl", 1982, 7.9],
    ["Monty Python's The Meaning of Life", 1983, 7.5],
    ["Monty Python's Life of Brian", 1979, 8.0],
]
cur.executemany["INSERT INTO movie VALUES[?, ?, ?]", data]
con.commit[]  # Remember to commit the transaction after executing INSERT.
7 với truy vấn. Luôn sử dụng trình giữ chỗ thay vì liên kết các giá trị Python với câu lệnh SQL để tránh các cuộc tấn công SQL injection [xem để biết thêm chi tiết]

Chúng tôi có thể xác minh rằng các hàng mới đã được chèn bằng cách thực hiện truy vấn

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
8, lần này lặp lại kết quả của truy vấn

>>> for row in cur.execute["SELECT year, title FROM movie ORDER BY year"]:
..     print[row]
[1971, 'And Now for Something Completely Different']
[1975, 'Monty Python and the Holy Grail']
[1979, "Monty Python's Life of Brian"]
[1982, 'Monty Python Live at the Hollywood Bowl']
[1983, "Monty Python's The Meaning of Life"]

Mỗi hàng là hai mục của

>>> for row in cur.execute["SELECT year, title FROM movie ORDER BY year"]:
..     print[row]
[1971, 'And Now for Something Completely Different']
[1975, 'Monty Python and the Holy Grail']
[1979, "Monty Python's Life of Brian"]
[1982, 'Monty Python Live at the Hollywood Bowl']
[1983, "Monty Python's The Meaning of Life"]
0, khớp với các cột được chọn trong truy vấn

Cuối cùng, xác minh rằng cơ sở dữ liệu đã được ghi vào đĩa bằng cách gọi để đóng kết nối hiện có, mở một kết nối mới, tạo con trỏ mới, sau đó truy vấn cơ sở dữ liệu

cur = con.cursor[]
0

Bây giờ bạn đã tạo cơ sở dữ liệu SQLite bằng mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0, đã chèn dữ liệu và truy xuất giá trị từ cơ sở dữ liệu đó theo nhiều cách

Xem thêm

  • để đọc thêm

  • để có kiến ​​thức chuyên sâu về kiểm soát giao dịch

Thẩm quyền giải quyết

chức năng mô-đun

sqlite3. kết nối[cơ sở dữ liệu , thời gian chờ . 0=5.0 , detect_types=0 . Kết nối isolation_level='DEFERRED', check_same_thread=True, factory=sqlite3.Connection , cached_statements=128, uri=False]

Mở kết nối tới cơ sở dữ liệu SQLite

Thông số
  • cơ sở dữ liệu [] – Đường dẫn đến tệp cơ sở dữ liệu sẽ được mở. Vượt qua

    >>> for row in cur.execute["SELECT year, title FROM movie ORDER BY year"]:
    ..     print[row]
    [1971, 'And Now for Something Completely Different']
    [1975, 'Monty Python and the Holy Grail']
    [1979, "Monty Python's Life of Brian"]
    [1982, 'Monty Python Live at the Hollywood Bowl']
    [1983, "Monty Python's The Meaning of Life"]
    
    3 để mở kết nối tới cơ sở dữ liệu trong RAM thay vì trên đĩa

  • timeout [] – Kết nối phải đợi bao nhiêu giây trước khi đưa ra một ngoại lệ, nếu cơ sở dữ liệu bị khóa bởi một kết nối khác. Nếu một kết nối khác mở một giao dịch để sửa đổi cơ sở dữ liệu, nó sẽ bị khóa cho đến khi giao dịch đó được thực hiện. Mặc định năm giây

  • detect_types[] – Kiểm soát xem và cách thức các loại dữ liệu không được tra cứu có được chuyển đổi thành các loại Python hay không, bằng cách sử dụng các trình chuyển đổi đã đăng ký với. Đặt nó thành bất kỳ kết hợp nào [sử dụng

    >>> for row in cur.execute["SELECT year, title FROM movie ORDER BY year"]:
    ..     print[row]
    [1971, 'And Now for Something Completely Different']
    [1975, 'Monty Python and the Holy Grail']
    [1979, "Monty Python's Life of Brian"]
    [1982, 'Monty Python Live at the Hollywood Bowl']
    [1983, "Monty Python's The Meaning of Life"]
    
    5, bitwise hoặc] của và để kích hoạt tính năng này. Tên cột được ưu tiên hơn các loại đã khai báo nếu cả hai cờ được đặt. Không thể phát hiện các loại cho các trường đã tạo [ví dụ:
    >>> for row in cur.execute["SELECT year, title FROM movie ORDER BY year"]:
    ..     print[row]
    [1971, 'And Now for Something Completely Different']
    [1975, 'Monty Python and the Holy Grail']
    [1979, "Monty Python's Life of Brian"]
    [1982, 'Monty Python Live at the Hollywood Bowl']
    [1983, "Monty Python's The Meaning of Life"]
    
    8], ngay cả khi tham số detect_types được đặt; . Theo mặc định [
    cur = con.cursor[]
    
    00], tính năng phát hiện loại bị tắt

  • mức_cô lập [. Không có] – Kết nối, kiểm soát xem các giao dịch có được mở hoàn toàn hay không và như thế nào. Có thể là

    cur = con.cursor[]
    
    02 [mặc định],
    cur = con.cursor[]
    
    03 hoặc
    cur = con.cursor[]
    
    04; . Xem thêm

  • check_same_thread[] – Nếu

    cur = con.cursor[]
    
    06 [mặc định] thì chỉ thread tạo mới có thể sử dụng kết nối. Nếu
    cur = con.cursor[]
    
    07, kết nối có thể được chia sẻ trên nhiều luồng;

  • factory[] – Một lớp con tùy chỉnh của để tạo kết nối với, nếu không phải là lớp mặc định

  • cached_statements [] – Số lượng câu lệnh mà

    cur.execute["""
        INSERT INTO movie VALUES
            ['Monty Python and the Holy Grail', 1975, 8.2],
            ['And Now for Something Completely Different', 1971, 7.5]
    """]
    
    0 sẽ lưu vào bộ nhớ cache nội bộ cho kết nối này, để tránh phân tích cú pháp chi phí. Theo mặc định, 128 câu lệnh

  • uri[] – Nếu được đặt thành

    cur = con.cursor[]
    
    06, cơ sở dữ liệu được hiểu là URI với đường dẫn tệp và chuỗi truy vấn tùy chọn. Phần sơ đồ phải là
    cur = con.cursor[]
    
    12 và đường dẫn có thể là tương đối hoặc tuyệt đối. Chuỗi truy vấn cho phép chuyển tham số sang SQLite, cho phép nhiều loại

loại trả lại

Đưa ra một

cur = con.cursor[]
13 với lập luận
cur = con.cursor[]
14

Đưa ra một

cur = con.cursor[]
15 với lập luận
cur = con.cursor[]
16

Mới trong phiên bản 3. 4. Tham số uri.

Đã thay đổi trong phiên bản 3. 7. cơ sở dữ liệu bây giờ cũng có thể là một , không chỉ là một chuỗi.

Mới trong phiên bản 3. 10. Sự kiện kiểm toán

cur = con.cursor[]
15.

sqlite3. complete_statement[câu lệnh]

Trả lại

cur = con.cursor[]
06 nếu câu lệnh chuỗi dường như chứa một hoặc nhiều câu lệnh SQL hoàn chỉnh. Không có xác minh cú pháp hoặc phân tích cú pháp dưới bất kỳ hình thức nào được thực hiện, ngoài việc kiểm tra để đảm bảo rằng không có chuỗi ký tự không được đóng dấu và câu lệnh được kết thúc bằng dấu chấm phẩy

Ví dụ

cur = con.cursor[]
1

Chức năng này có thể hữu ích trong khi nhập dòng lệnh để xác định xem văn bản đã nhập có phải là một câu lệnh SQL hoàn chỉnh hay không hoặc nếu cần nhập thêm trước khi gọi

sqlite3. enable_callback_tracebacks[flag , /]

Bật hoặc tắt theo dõi cuộc gọi lại. Theo mặc định, bạn sẽ không nhận được bất kỳ dấu vết nào trong các chức năng do người dùng xác định, tổng hợp, trình chuyển đổi, lệnh gọi lại của người ủy quyền, v.v. Nếu bạn muốn gỡ lỗi chúng, bạn có thể gọi chức năng này với cờ được đặt thành

cur = con.cursor[]
06. Sau đó, bạn sẽ nhận được dấu vết từ các cuộc gọi lại trên. Sử dụng
cur = con.cursor[]
07 để tắt lại tính năng này

Đăng ký để có trải nghiệm gỡ lỗi được cải thiện

cur = con.cursor[]
2

sqlite3. register_adapter[loại , bộ chuyển đổi, /]

Đăng ký một bộ điều hợp có thể gọi được để điều chỉnh loại Python thành loại SQLite. Bộ điều hợp được gọi với một đối tượng kiểu Python làm đối số duy nhất của nó và phải trả về một giá trị là

sqlite3. register_converter[typename , converter, /]

Đăng ký trình chuyển đổi có thể gọi được để chuyển đổi các đối tượng SQLite thuộc loại tên thành một đối tượng Python thuộc một loại cụ thể. Trình chuyển đổi được gọi cho tất cả các giá trị SQLite của kiểu tên; . Tham khảo tham số detect_types của để biết thông tin về cách hoạt động của tính năng phát hiện loại

Ghi chú. tên loại và tên của loại trong truy vấn của bạn được đối sánh không phân biệt chữ hoa chữ thường

hằng số mô-đun

sqlite3. PARSE_COLNAMES

Chuyển giá trị cờ này cho tham số detect_types để tra cứu hàm chuyển đổi bằng cách sử dụng tên loại, được phân tích cú pháp từ tên cột truy vấn, làm khóa từ điển chuyển đổi. Tên loại phải được đặt trong dấu ngoặc vuông [

cur = con.cursor[]
27]

cur = con.cursor[]
3

Cờ này có thể được kết hợp với việc sử dụng toán tử

>>> for row in cur.execute["SELECT year, title FROM movie ORDER BY year"]:
..     print[row]
[1971, 'And Now for Something Completely Different']
[1975, 'Monty Python and the Holy Grail']
[1979, "Monty Python's Life of Brian"]
[1982, 'Monty Python Live at the Hollywood Bowl']
[1983, "Monty Python's The Meaning of Life"]
5 [bitwise or]

sqlite3. PARSE_DECLTYPES

Chuyển giá trị cờ này cho tham số detect_types để tra cứu hàm chuyển đổi bằng cách sử dụng các loại đã khai báo cho mỗi cột. Các loại được khai báo khi bảng cơ sở dữ liệu được tạo.

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 sẽ tra cứu hàm chuyển đổi bằng cách sử dụng từ đầu tiên của loại được khai báo làm khóa từ điển chuyển đổi. Ví dụ

cur = con.cursor[]
4

Cờ này có thể được kết hợp với việc sử dụng toán tử

>>> for row in cur.execute["SELECT year, title FROM movie ORDER BY year"]:
..     print[row]
[1971, 'And Now for Something Completely Different']
[1975, 'Monty Python and the Holy Grail']
[1979, "Monty Python's Life of Brian"]
[1982, 'Monty Python Live at the Hollywood Bowl']
[1983, "Monty Python's The Meaning of Life"]
5 [bitwise or]

sqlite3. SQLITE_OKsqlite3. SQLITE_DENYsqlite3. SQLITE_IGNORE

Các cờ sẽ được trả về bởi hàm có thể gọi lại ủy quyền_callback được chuyển đến , để cho biết liệu

  • Quyền truy cập được cho phép [

    cur = con.cursor[]
    
    35],

  • Câu lệnh SQL sẽ bị hủy bỏ khi có lỗi [

    cur = con.cursor[]
    
    36]

  • Cột phải được coi là giá trị

    cur = con.cursor[]
    
    37 [
    cur = con.cursor[]
    
    38]

sqlite3. apilevel

Hằng số chuỗi cho biết mức DB-API được hỗ trợ. Yêu cầu bởi DB-API. Mã hóa cứng thành

cur = con.cursor[]
39

sqlite3. paramstyle

Hằng số chuỗi cho biết loại định dạng đánh dấu tham số mà mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 mong đợi. Yêu cầu bởi DB-API. Mã hóa cứng thành
cur = con.cursor[]
41

Ghi chú

Kiểu tham số DB-API

cur = con.cursor[]
42 cũng được hỗ trợ

sqlite3. sqlite_version

Số phiên bản của thư viện SQLite thời gian chạy dưới dạng

sqlite3. sqlite_version_info

Số phiên bản của thư viện SQLite thời gian chạy là một trong số

sqlite3. an toàn luồng

Hằng số nguyên theo yêu cầu của DB-API 2. 0, nêu rõ mức độ an toàn của luồng mà mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 hỗ trợ. Thuộc tính này được đặt dựa trên chế độ phân luồng mặc định mà thư viện SQLite bên dưới được biên dịch với. Các chế độ luồng SQLite là

  1. đơn luồng. Trong chế độ này, tất cả các mutex đều bị vô hiệu hóa và SQLite không an toàn khi sử dụng trong nhiều luồng đơn lẻ cùng một lúc

  2. đa luồng. Trong chế độ này, SQLite có thể được sử dụng an toàn bởi nhiều luồng với điều kiện là không có kết nối cơ sở dữ liệu đơn lẻ nào được sử dụng đồng thời trong hai hoặc nhiều luồng

  3. nối tiếp. Ở chế độ tuần tự hóa, SQLite có thể được nhiều luồng sử dụng một cách an toàn mà không bị hạn chế

Ánh xạ từ các chế độ luồng SQLite sang DB-API 2. 0 mức độ an toàn luồng như sau

Chế độ luồng SQLite

DB-API 2. 0 ý nghĩa

đơn luồng

0

0

Chủ đề có thể không chia sẻ mô-đun

đa luồng

1

2

Chủ đề có thể chia sẻ mô-đun, nhưng không kết nối

nối tiếp

3

1

Chủ đề có thể chia sẻ mô-đun, kết nối và con trỏ

Đã thay đổi trong phiên bản 3. 11. Đặt chủ đề an toàn một cách linh hoạt thay vì mã hóa cứng nó thành

cur = con.cursor[]
47.

sqlite3. phiên bản

Số phiên bản của mô-đun này dưới dạng. Đây không phải là phiên bản của thư viện SQLite

sqlite3. version_info

Số phiên bản của mô-đun này là một trong số. Đây không phải là phiên bản của thư viện SQLite

đối tượng kết nối

lớp sqlite3. Kết nối

Mỗi cơ sở dữ liệu SQLite mở được đại diện bởi một đối tượng

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
7, được tạo bằng cách sử dụng. Mục đích chính của chúng là tạo ra các đối tượng, và

Xem thêm

Kết nối cơ sở dữ liệu SQLite có các thuộc tính và phương thức sau

con trỏ[nhà máy=Con trỏ]

Tạo và trả về một đối tượng. Phương thức con trỏ chấp nhận một nhà máy tham số tùy chọn duy nhất. Nếu được cung cấp, đây phải là một thể hiện có thể gọi được trả về một thể hiện của hoặc các lớp con của nó

blobopen[bảng , cột, row, /, *, readonly=False, name='main']

Mở một tay cầm cho một BLOB hiện có

Thông số
  • table [] – Tên của bảng chứa blob

  • cột [] – Tên của cột chứa đốm màu

  • hàng [] – Tên của hàng chứa đốm màu

  • chỉ đọc [] – Đặt thành

    cur = con.cursor[]
    
    06 nếu đốm màu được mở mà không có quyền ghi. Mặc định là
    cur = con.cursor[]
    
    07

  • name [] – Tên của cơ sở dữ liệu chứa blob. Mặc định là

    cur = con.cursor[]
    
    59

tăng

– Khi cố gắng mở một đốm màu trong bảng

cur = con.cursor[]
60

loại trả lại

Ghi chú

Kích thước blob không thể thay đổi bằng cách sử dụng lớp. Sử dụng hàm SQL

cur = con.cursor[]
62 để tạo đốm màu có kích thước cố định

Mới trong phiên bản 3. 11

cam kết[]

Cam kết mọi giao dịch đang chờ xử lý vào cơ sở dữ liệu. Nếu không có giao dịch mở, phương pháp này là không hoạt động

rollback[]

Quay lại điểm bắt đầu của bất kỳ giao dịch đang chờ xử lý nào. Nếu không có giao dịch mở, phương pháp này là không hoạt động

đóng[]

Đóng kết nối cơ sở dữ liệu. Bất kỳ giao dịch đang chờ xử lý nào đều không được cam kết ngầm;

thực thi[sql , tham số=[], /]

Tạo một đối tượng mới và gọi nó với sql và tham số đã cho. Trả về đối tượng con trỏ mới

executemany[sql , tham số, /]

Tạo một đối tượng mới và gọi nó với sql và tham số đã cho. Trả về đối tượng con trỏ mới

executescript[sql_script , /]

Tạo một đối tượng mới và gọi nó với sql_script đã cho. Trả về đối tượng con trỏ mới

create_function[tên , narg, func, *, deterministic=False]

Tạo hoặc xóa hàm SQL do người dùng định nghĩa

Thông số
  • name[] – Tên của hàm SQL

  • narg[] – Số đối số mà hàm SQL có thể chấp nhận. Nếu

    cur = con.cursor[]
    
    70, nó có thể nhận bất kỳ số đối số nào

  • chức năng [. Không có] – Có thể gọi được gọi khi hàm SQL được gọi. Có thể gọi được phải trả lại. Đặt thành

    >>> res = cur.execute["SELECT score FROM movie"]
    >>> res.fetchall[]
    [[8.2,], [7.5,]]
    
    3 để xóa hàm SQL hiện có

  • xác định [] – Nếu

    cur = con.cursor[]
    
    06, hàm SQL đã tạo được đánh dấu là xác định, cho phép SQLite thực hiện các tối ưu hóa bổ sung

tăng

– Nếu tất định được sử dụng với các phiên bản SQLite cũ hơn 3. 8. 3

Mới trong phiên bản 3. 8. Tham số xác định.

Thí dụ

cur = con.cursor[]
5

create_aggregate[tên , /, n_arg, aggregate_class]

Tạo hoặc xóa hàm tổng hợp SQL do người dùng xác định

Thông số
  • name[] – Tên của hàm tổng hợp SQL

  • n_arg[] – Số lượng đối số mà hàm tổng hợp SQL có thể chấp nhận. Nếu

    cur = con.cursor[]
    
    70, nó có thể nhận bất kỳ số đối số nào

  • lớp tổng hợp [. Không có] -

    Một lớp phải thực hiện các phương pháp sau

    • cur = con.cursor[]
      
      74. Thêm một hàng vào tổng hợp

    • cur = con.cursor[]
      
      75. Trả về kết quả cuối cùng của tổng hợp là

    Số lượng đối số mà phương thức

    cur = con.cursor[]
    
    74 phải chấp nhận được kiểm soát bởi n_arg

    Đặt thành

    >>> res = cur.execute["SELECT score FROM movie"]
    >>> res.fetchall[]
    [[8.2,], [7.5,]]
    
    3 để xóa hàm tổng hợp SQL hiện có

Thí dụ

cur = con.cursor[]
6

create_window_function[tên , num_params, aggregate_class, /]

Tạo hoặc xóa chức năng cửa sổ tổng hợp do người dùng xác định

Thông số
  • name [] – Tên của hàm cửa sổ tổng hợp SQL để tạo hoặc xóa

  • num_params[] – Số đối số mà hàm cửa sổ tổng hợp SQL có thể chấp nhận. Nếu

    cur = con.cursor[]
    
    70, nó có thể nhận bất kỳ số đối số nào

  • lớp tổng hợp [. Không có] -

    Một lớp phải thực hiện các phương thức sau

    • cur = con.cursor[]
      
      74. Thêm một hàng vào cửa sổ hiện tại

    • cur = con.cursor[]
      
      80. Trả về giá trị hiện tại của tổng hợp

    • cur = con.cursor[]
      
      81. Xóa một hàng khỏi cửa sổ hiện tại

    • cur = con.cursor[]
      
      75. Trả về kết quả cuối cùng của tổng hợp là

    Số lượng đối số mà các phương thức

    cur = con.cursor[]
    
    74 và
    cur = con.cursor[]
    
    80 phải chấp nhận được kiểm soát bởi num_params

    Đặt thành

    >>> res = cur.execute["SELECT score FROM movie"]
    >>> res.fetchall[]
    [[8.2,], [7.5,]]
    
    3 để xóa chức năng cửa sổ tổng hợp SQL hiện có

tăng

– Nếu được sử dụng với phiên bản SQLite cũ hơn 3. 25. 0, không hỗ trợ các chức năng cửa sổ tổng hợp

Mới trong phiên bản 3. 11

Thí dụ

cur = con.cursor[]
7

create_collation[tên , có thể gọi]

Tạo một đối chiếu có tên name bằng chức năng đối chiếu có thể gọi được. callable được thông qua hai đối số và nó sẽ trả về một

  • cur = con.cursor[]
    
    47 nếu cái đầu tiên được đặt cao hơn cái thứ hai

  • cur = con.cursor[]
    
    70 nếu cái đầu tiên được đặt thấp hơn cái thứ hai

  • cur = con.cursor[]
    
    00 nếu chúng được sắp xếp bằng nhau

Ví dụ sau đây cho thấy một đối chiếu sắp xếp ngược lại

cur = con.cursor[]
8

Xóa chức năng đối chiếu bằng cách đặt có thể gọi thành

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3

Đã thay đổi trong phiên bản 3. 11. Tên đối chiếu có thể chứa bất kỳ ký tự Unicode nào. Trước đó, chỉ các ký tự ASCII được phép.

gián đoạn[]

Gọi phương thức này từ một luồng khác để hủy bỏ mọi truy vấn có thể đang thực thi trên kết nối. Các truy vấn bị hủy bỏ sẽ đưa ra một ngoại lệ

set_authorizer[authorizer_callback]

Đăng ký ủy quyền có thể gọi được để được gọi cho mỗi lần cố gắng truy cập một cột của bảng trong cơ sở dữ liệu. Cuộc gọi lại sẽ trả về một trong số , hoặc để báo hiệu cách thư viện SQLite bên dưới xử lý quyền truy cập vào cột

Đối số đầu tiên cho cuộc gọi lại biểu thị loại hoạt động nào sẽ được ủy quyền. Đối số thứ hai và thứ ba sẽ là đối số hoặc

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3 tùy thuộc vào đối số thứ nhất. Đối số thứ 4 là tên của cơ sở dữ liệu [“main”, “temp”, v.v. ] nếu có. Đối số thứ 5 là tên của trình kích hoạt hoặc chế độ xem bên trong nhất chịu trách nhiệm về nỗ lực truy cập hoặc
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3 nếu nỗ lực truy cập này trực tiếp từ mã SQL đầu vào

Vui lòng tham khảo tài liệu SQLite về các giá trị có thể có cho đối số thứ nhất và ý nghĩa của đối số thứ hai và thứ ba tùy thuộc vào đối số thứ nhất. Tất cả các hằng số cần thiết đều có sẵn trong mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0

Vượt qua

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3 dưới dạng ủy quyền_callback sẽ vô hiệu hóa trình ủy quyền

Đã thay đổi trong phiên bản 3. 11. Đã thêm hỗ trợ để tắt trình ủy quyền bằng cách sử dụng

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3.

set_progress_handler[progress_handler , n]

Đăng ký process_handler có thể gọi để được gọi cho mỗi n hướng dẫn của máy ảo SQLite. Điều này hữu ích nếu bạn muốn được gọi từ SQLite trong các hoạt động chạy dài, chẳng hạn như để cập nhật GUI

Nếu bạn muốn xóa bất kỳ trình xử lý tiến trình nào đã cài đặt trước đó, hãy gọi phương thức bằng

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3 cho process_handler

Việc trả về một giá trị khác 0 từ hàm xử lý sẽ chấm dứt truy vấn hiện đang thực thi và khiến nó đưa ra một ngoại lệ

set_trace_callback[trace_callback]

Đăng ký dấu vết gọi lại có thể gọi được để được gọi cho mỗi câu lệnh SQL thực sự được thực thi bởi phần phụ trợ SQLite

Đối số duy nhất được truyền cho hàm gọi lại là câu lệnh [as ] đang được thực thi. Giá trị trả về của cuộc gọi lại bị bỏ qua. Lưu ý rằng chương trình phụ trợ không chỉ chạy các câu lệnh được truyền cho các phương thức. Các nguồn khác bao gồm mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 và việc thực thi các trình kích hoạt được xác định trong cơ sở dữ liệu hiện tại

Vượt qua

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3 vì trace_callback sẽ vô hiệu hóa lệnh gọi lại theo dõi

Ghi chú

Các ngoại lệ được đưa ra trong cuộc gọi lại theo dõi không được phổ biến. Là một công cụ hỗ trợ phát triển và gỡ lỗi, hãy sử dụng để cho phép in truy nguyên từ các ngoại lệ được nêu trong lệnh gọi lại theo dõi

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

enable_load_extension[đã bật , /]

Cho phép công cụ SQLite tải các phần mở rộng SQLite từ thư viện dùng chung nếu được bật là

cur = con.cursor[]
06; . Các tiện ích mở rộng SQLite có thể xác định các chức năng mới, tổng hợp hoặc triển khai bảng ảo hoàn toàn mới. Một phần mở rộng nổi tiếng là phần mở rộng tìm kiếm toàn văn được phân phối với SQLite

Ghi chú

Mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 không được xây dựng với hỗ trợ tiện ích mở rộng có thể tải theo mặc định, vì một số nền tảng [đặc biệt là macOS] có các thư viện SQLite được biên dịch mà không có tính năng này. Để nhận hỗ trợ tiện ích mở rộng có thể tải, bạn phải vượt qua tùy chọn để định cấu hình

Nâng cao một

cur.execute["CREATE TABLE movie[title, year, score]"]
10 với các đối số
cur.execute["CREATE TABLE movie[title, year, score]"]
11,
cur.execute["CREATE TABLE movie[title, year, score]"]
12

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

Đã thay đổi trong phiên bản 3. 10. Đã thêm sự kiện kiểm tra

cur.execute["CREATE TABLE movie[title, year, score]"]
10.

cur = con.cursor[]
9

load_extension[đường dẫn , /]

Tải tiện ích mở rộng SQLite từ thư viện dùng chung có tại đường dẫn. Cho phép tải tiện ích mở rộng bằng trước khi gọi phương thức này

Nâng cao một

cur.execute["CREATE TABLE movie[title, year, score]"]
15 với các đối số
cur.execute["CREATE TABLE movie[title, year, score]"]
11,
cur.execute["CREATE TABLE movie[title, year, score]"]
17

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

Đã thay đổi trong phiên bản 3. 10. Đã thêm sự kiện kiểm tra

cur.execute["CREATE TABLE movie[title, year, score]"]
15.

iterdump[]

Trả lại một kết xuất cơ sở dữ liệu dưới dạng mã nguồn SQL. Hữu ích khi lưu cơ sở dữ liệu trong bộ nhớ để phục hồi sau này. Tương tự như lệnh

cur.execute["CREATE TABLE movie[title, year, score]"]
19 trong shell sqlite3

Thí dụ

cur.execute["CREATE TABLE movie[title, year, score]"]
0

dự phòng[mục tiêu , *, pages=- 1, progress=None, name='main', sleep=0.250]

Tạo bản sao lưu của cơ sở dữ liệu SQLite

Hoạt động ngay cả khi cơ sở dữ liệu đang được truy cập bởi các máy khách khác hoặc đồng thời bởi cùng một kết nối

Thông số
  • target[] – Kết nối cơ sở dữ liệu để lưu bản sao lưu vào

  • pages [] – Số trang cần sao chép tại một thời điểm. Nếu bằng hoặc nhỏ hơn

    cur = con.cursor[]
    
    00, toàn bộ cơ sở dữ liệu sẽ được sao chép trong một bước. Mặc định là
    cur = con.cursor[]
    
    70

  • phát triển [. Không có] – Nếu được đặt thành có thể gọi được, thì nó được gọi với ba đối số nguyên cho mỗi lần lặp sao lưu. trạng thái của lần lặp cuối cùng, số trang còn lại vẫn được sao chép và tổng số trang. Mặc định là

    >>> res = cur.execute["SELECT score FROM movie"]
    >>> res.fetchall[]
    [[8.2,], [7.5,]]
    
    3

  • name[] – Tên của cơ sở dữ liệu để sao lưu.

    cur = con.cursor[]
    
    59 [mặc định] cho cơ sở dữ liệu chính,
    cur.execute["CREATE TABLE movie[title, year, score]"]
    
    24 cho cơ sở dữ liệu tạm thời hoặc tên của cơ sở dữ liệu tùy chỉnh như được đính kèm bằng cách sử dụng câu lệnh SQL
    cur.execute["CREATE TABLE movie[title, year, score]"]
    
    25

  • ngủ [] – Số giây để ngủ giữa các lần thử liên tiếp để sao lưu các trang còn lại

Ví dụ 1, sao chép một cơ sở dữ liệu hiện có sang một cơ sở dữ liệu khác

cur.execute["CREATE TABLE movie[title, year, score]"]
1

Ví dụ 2, sao chép cơ sở dữ liệu hiện có vào một bản sao tạm thời

cur.execute["CREATE TABLE movie[title, year, score]"]
2

Mới trong phiên bản 3. 7

getlimit[danh mục , /]

Nhận giới hạn thời gian chạy kết nối

Thông số

danh mục [] - Danh mục giới hạn SQLite được truy vấn

loại trả lại

tăng

– Nếu danh mục không được thư viện SQLite bên dưới nhận dạng

Ví dụ, truy vấn độ dài tối đa của câu lệnh SQL cho

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
8 [mặc định là 1000000000]

cur.execute["CREATE TABLE movie[title, year, score]"]
3

Mới trong phiên bản 3. 11

setlimit[danh mục , giới hạn, /]

Đặt giới hạn thời gian chạy kết nối. Nỗ lực tăng giới hạn trên giới hạn trên cứng của nó bị cắt ngắn một cách lặng lẽ đến giới hạn trên cứng. Bất kể giới hạn có bị thay đổi hay không, giá trị trước đó của giới hạn được trả về

Thông số
  • danh mục [] – Danh mục giới hạn SQLite sẽ được đặt

  • giới hạn [] – Giá trị của giới hạn mới. Nếu âm, giới hạn hiện tại không thay đổi

loại trả lại

tăng

– Nếu danh mục không được thư viện SQLite bên dưới nhận dạng

Ví dụ, giới hạn số lượng cơ sở dữ liệu đính kèm là 1 cho

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
8 [giới hạn mặc định là 10]

cur.execute["CREATE TABLE movie[title, year, score]"]
4

Mới trong phiên bản 3. 11

xếp thứ tự[* , tên='main']

Tuần tự hóa cơ sở dữ liệu thành một đối tượng. Đối với một tệp cơ sở dữ liệu trên đĩa thông thường, việc tuần tự hóa chỉ là một bản sao của tệp đĩa. Đối với cơ sở dữ liệu trong bộ nhớ hoặc cơ sở dữ liệu “tạm thời”, tuần tự hóa là cùng một chuỗi byte sẽ được ghi vào đĩa nếu cơ sở dữ liệu đó được sao lưu vào đĩa

Thông số

name [] – Tên cơ sở dữ liệu sẽ được sắp xếp theo thứ tự. Mặc định là

cur = con.cursor[]
59

loại trả lại

Ghi chú

Phương pháp này chỉ khả dụng nếu thư viện SQLite cơ bản có API tuần tự hóa

Mới trong phiên bản 3. 11

giải tuần tự hóa[dữ liệu , /, *, name='main']

Deserialize một cơ sở dữ liệu thành một. Phương pháp này khiến kết nối cơ sở dữ liệu bị ngắt kết nối khỏi tên cơ sở dữ liệu và mở lại tên dưới dạng cơ sở dữ liệu trong bộ nhớ dựa trên tuần tự hóa có trong dữ liệu

Thông số
  • data [] – Cơ sở dữ liệu được tuần tự hóa

  • name [] – Tên cơ sở dữ liệu để giải tuần tự hóa thành. Mặc định là

    cur = con.cursor[]
    
    59

tăng
  • – Nếu kết nối cơ sở dữ liệu hiện đang tham gia vào một giao dịch đọc hoặc một hoạt động sao lưu

  • – Nếu dữ liệu không chứa cơ sở dữ liệu SQLite hợp lệ

  • – Nếu lớn hơn

    cur.execute["CREATE TABLE movie[title, year, score]"]
    
    36

Ghi chú

Phương pháp này chỉ khả dụng nếu thư viện SQLite bên dưới có API deserialize

Mới trong phiên bản 3. 11

in_transaction

Thuộc tính chỉ đọc này tương ứng với SQLite cấp thấp

cur = con.cursor[]
06 nếu một giao dịch đang hoạt động [có những thay đổi không được cam kết],
cur = con.cursor[]
07 nếu không

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

cô lập_level

Thuộc tính này kiểm soát việc thực hiện bởi

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0. Nếu được đặt thành
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3, các giao dịch sẽ không bao giờ được mở hoàn toàn. Nếu được đặt thành một trong số
cur = con.cursor[]
02,
cur = con.cursor[]
04 hoặc
cur = con.cursor[]
03, tương ứng với cơ sở , ngầm định được thực hiện

Nếu không bị ghi đè bởi tham số Isolation_level của , giá trị mặc định là

cur.execute["CREATE TABLE movie[title, year, score]"]
45, là bí danh của
cur = con.cursor[]
02

row_factory

Ban đầu cho các đối tượng được tạo từ kết nối này. Việc gán cho thuộc tính này không ảnh hưởng đến

cur.execute["CREATE TABLE movie[title, year, score]"]
47 con trỏ hiện có thuộc kết nối này, chỉ những con trỏ mới. Là
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3 theo mặc định, nghĩa là mỗi hàng được trả về dưới dạng một

Xem để biết thêm chi tiết

text_factory

Một khả năng gọi được chấp nhận một tham số và trả về một đại diện văn bản của nó. Có thể gọi được gọi cho các giá trị SQLite với kiểu dữ liệu

cur.execute["CREATE TABLE movie[title, year, score]"]
53. Theo mặc định, thuộc tính này được đặt thành. Thay vào đó, nếu bạn muốn trả về
cur = con.cursor[]
24, hãy đặt text_factory thành
cur = con.cursor[]
24

Thí dụ

cur.execute["CREATE TABLE movie[title, year, score]"]
5

tổng_thay đổi

Trả về tổng số hàng cơ sở dữ liệu đã được sửa đổi, chèn hoặc xóa kể từ khi kết nối cơ sở dữ liệu được mở

đối tượng con trỏ

Một đối tượng

con.commit[]
0 đại diện cho một con trỏ cơ sở dữ liệu được sử dụng để thực thi các câu lệnh SQL và quản lý ngữ cảnh của thao tác tìm nạp. Con trỏ được tạo bằng cách sử dụng hoặc bằng cách sử dụng bất kỳ

Các đối tượng con trỏ là , có nghĩa là nếu bạn truy vấn

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
8, bạn có thể chỉ cần lặp lại con trỏ để tìm nạp các hàng kết quả

cur.execute["CREATE TABLE movie[title, year, score]"]
6

lớp sqlite3. Con trỏ

Một thể hiện có các thuộc tính và phương thức sau

thực thi[sql , tham số=[], /]

Thực thi câu lệnh SQL sql. Liên kết các giá trị với câu lệnh bằng cách sử dụng ánh xạ đó tới tham số hoặc

will only execute a single SQL statement. Nếu bạn cố gắng thực hiện nhiều hơn một câu lệnh với nó, nó sẽ làm tăng. Use if you want to execute multiple SQL statements with one call

Nếu không phải là

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3, sql là câu lệnh
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
4,
cur.execute["CREATE TABLE movie[title, year, score]"]
69,
cur.execute["CREATE TABLE movie[title, year, score]"]
70 hoặc
cur.execute["CREATE TABLE movie[title, year, score]"]
71 và không có giao dịch mở, giao dịch được mở ngầm trước khi thực hiện sql

executemany[sql , tham số, /]

Thực thi câu lệnh SQL sql đối với tất cả các chuỗi tham số hoặc ánh xạ được tìm thấy trong các tham số chuỗi. Cũng có thể sử dụng một tham số năng suất thay vì một chuỗi. Uses the same implicit transaction handling as

Thí dụ

cur.execute["CREATE TABLE movie[title, year, score]"]
7

executescript[sql_script , /]

Thực thi các câu lệnh SQL trong sql_script. Nếu có một giao dịch đang chờ xử lý, một câu lệnh ngầm

cur.execute["CREATE TABLE movie[title, year, score]"]
73 được thực hiện trước. Không có kiểm soát giao dịch ngầm nào khác được thực hiện;

sql_script phải là một

Thí dụ

cur.execute["CREATE TABLE movie[title, year, score]"]
8

tìm nạp[]

Nếu là

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3, hãy trả về tập kết quả truy vấn hàng tiếp theo dưới dạng. Khác, chuyển nó đến nhà máy sản xuất hàng và trả về kết quả của nó. Trả lại
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3 nếu không có thêm dữ liệu

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

Trả về tập hợp các hàng tiếp theo của kết quả truy vấn dưới dạng. Trả về danh sách trống nếu không còn hàng nào nữa

Số lượng hàng cần tìm nạp cho mỗi cuộc gọi được chỉ định bởi tham số kích thước. If size is not given, determines the number of rows to be fetched. Nếu có ít hàng hơn kích thước, số hàng có sẵn sẽ được trả về

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. For optimal performance, it is usually best to use the arraysize attribute. 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[]

Trả về tất cả các hàng [còn lại] của kết quả truy vấn dưới dạng. Trả về danh sách trống nếu không có hàng nào. Note that the attribute can affect the performance of this operation

đóng[]

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

cur.execute["CREATE TABLE movie[title, year, score]"]
84 được gọi]

Con trỏ sẽ không sử dụng được từ thời điểm này trở đi;

setinputsizes[kích thước , /]

Yêu cầu bởi DB-API. Không làm gì trong

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0

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

Yêu cầu bởi DB-API. Không làm gì trong

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0

kích thước mảng

Thuộc tính đọc/ghi kiểm soát số hàng được trả về bởi. Giá trị mặc định là 1 có nghĩa là một hàng sẽ được tìm nạp cho mỗi cuộc gọi

sự liên quan

Thuộc tính chỉ đọc cung cấp cơ sở dữ liệu SQLite thuộc về con trỏ. Một đối tượng được tạo bằng cách gọi sẽ có một thuộc tính đề cập đến con

cur.execute["CREATE TABLE movie[title, year, score]"]
9

sự miêu tả

Thuộc tính chỉ đọc cung cấp tên cột của truy vấn cuối cùng. To remain compatible with the Python DB API, it returns a 7-tuple for each column where the last six items of each tuple are

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3

It is set for

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
8 statements without any matching rows as well

lastrowid

Thuộc tính chỉ đọc cung cấp id hàng của hàng được chèn cuối cùng. Nó chỉ được cập nhật sau khi các câu lệnh

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
4 hoặc
cur.execute["CREATE TABLE movie[title, year, score]"]
71 thành công sử dụng phương thức. Đối với các câu lệnh khác, sau hoặc hoặc nếu chèn không thành công, giá trị của
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
00 sẽ không thay đổi. Giá trị ban đầu của
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
00 là
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3

Ghi chú

Phụ trang vào bảng

cur = con.cursor[]
60 không được ghi lại

Đã thay đổi trong phiên bản 3. 6. Đã thêm hỗ trợ cho câu lệnh

cur.execute["CREATE TABLE movie[title, year, score]"]
71.

đếm số hàng

Thuộc tính chỉ đọc cung cấp số lượng hàng đã sửa đổi cho câu lệnh

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
4,
cur.execute["CREATE TABLE movie[title, year, score]"]
69,
cur.execute["CREATE TABLE movie[title, year, score]"]
70 và
cur.execute["CREATE TABLE movie[title, year, score]"]
71; . It is only updated by the and methods

row_factory

Kiểm soát cách trình bày một hàng được tìm nạp từ

con.commit[]
0 này. Nếu
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3, một hàng được biểu diễn dưới dạng. Có thể được đặt thành bao gồm;

Mặc định là những gì đã được đặt khi

con.commit[]
0 được tạo. Việc gán cho thuộc tính này không ảnh hưởng đến kết nối chính

Xem để biết thêm chi tiết

đối tượng hàng

lớp sqlite3. Hàng

A

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
21 instance serves as a highly optimized for objects. Nó hỗ trợ phép lặp, kiểm tra bằng và truy cập theo tên cột và chỉ mục

Hai đối tượng

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
21 so sánh bằng nhau nếu chúng có tên và giá trị cột giống hệt nhau

Xem để biết thêm chi tiết

keys[]

Trả về một trong số các tên cột dưới dạng. Ngay sau một truy vấn, nó là thành viên đầu tiên của mỗi bộ trong

Đã thay đổi trong phiên bản 3. 5. Đã thêm hỗ trợ cắt lát.

đối tượng đốm màu

Mới trong phiên bản 3. 11

lớp sqlite3. Blob

Một thể hiện là một thể hiện có thể đọc và ghi dữ liệu trong SQLite BLOB. Gọi để lấy kích thước [số byte] của đốm màu. Sử dụng các chỉ số và để truy cập trực tiếp vào dữ liệu blob

Sử dụng as a để đảm bảo rằng tay cầm blob được đóng lại sau khi sử dụng

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
0

đóng[]

Đóng đốm màu

Blob sẽ không sử dụng được từ thời điểm này trở đi. Một ngoại lệ [hoặc phân lớp] sẽ được đưa ra nếu có bất kỳ thao tác nào khác được thực hiện với đốm màu

đọc[độ dài=- 1, /]

Đọc các byte dữ liệu có độ dài từ đốm màu ở vị trí bù hiện tại. Nếu đạt đến cuối đốm màu, dữ liệu lên tới EOF sẽ được trả về. Khi độ dài không được chỉ định hoặc âm, sẽ đọc cho đến khi kết thúc đốm màu

ghi[dữ liệu , /]

Ghi dữ liệu vào đốm màu ở phần bù hiện tại. Chức năng này không thể thay đổi độ dài blob. Viết vượt quá phần cuối của đốm màu sẽ nâng cao

kể[]

Trả về vị trí truy cập hiện tại của blob

tìm kiếm[ , gốc=os.SEEK_SET , /]

Đặt vị trí truy cập hiện tại của blob thành offset. Đối số gốc mặc định là [định vị đốm màu tuyệt đối]. Các giá trị khác cho nguồn gốc là [tìm kiếm liên quan đến vị trí hiện tại] và [tìm kiếm liên quan đến phần cuối của đốm màu]

Chuẩn bị đối tượng Giao thức

lớp sqlite3. Chuẩn bị giao thức

Mục đích duy nhất của loại PrepareProtocol là hoạt động như một giao thức thích ứng kiểu PEP 246 cho các đối tượng có thể

ngoại lệ

Hệ thống phân cấp ngoại lệ được xác định bởi DB-API 2. 0 [PEP 249]

ngoại lệ sqlite3. Cảnh báo

Ngoại lệ này hiện không được mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 đưa ra, nhưng có thể được đưa ra bởi các ứng dụng sử dụng
cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0, ví dụ: nếu hàm do người dùng xác định cắt bớt dữ liệu trong khi chèn.
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
40 là một phân lớp của

exception sqlite3. Lỗi

Lớp cơ sở của các ngoại lệ khác trong mô-đun này. Sử dụng điều này để bắt tất cả các lỗi với một câu lệnh duy nhất.

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
32 là một phân lớp của

Nếu ngoại lệ bắt nguồn từ bên trong thư viện SQLite, hai thuộc tính sau đây sẽ được thêm vào ngoại lệ

sqlite_errorcode

Mã lỗi số từ API SQLite

Mới trong phiên bản 3. 11

sqlite_errorname

Tên tượng trưng của mã lỗi số từ API SQLite

Mới trong phiên bản 3. 11

ngoại lệ sqlite3. Lỗi giao diện

Ngoại lệ được đưa ra do lạm dụng API SQLite C cấp thấp. Nói cách khác, nếu ngoại lệ này được đưa ra, nó có thể chỉ ra một lỗi trong mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0.
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
46 là một phân lớp của

ngoại lệ sqlite3. Lỗi cơ sở dữ liệu

Ngoại lệ đưa ra cho các lỗi có liên quan đến cơ sở dữ liệu. Điều này đóng vai trò là ngoại lệ cơ bản cho một số loại lỗi cơ sở dữ liệu. It is only raised implicitly through the specialised subclasses.

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
48 là một phân lớp của

ngoại lệ sqlite3. Lỗi dữ liệu

Đã đưa ra ngoại lệ cho các lỗi do sự cố với dữ liệu được xử lý, chẳng hạn như giá trị số nằm ngoài phạm vi và chuỗi quá dài.

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
50 là một phân lớp của

ngoại lệ sqlite3. Lỗi thao tác

Ngoại lệ được đưa ra đối với các lỗi liên quan đến hoạt động của cơ sở dữ liệu và không nhất thiết nằm dưới sự kiểm soát của lập trình viên. Ví dụ: không tìm thấy đường dẫn cơ sở dữ liệu hoặc không thể xử lý giao dịch.

cur.execute["CREATE TABLE movie[title, year, score]"]
01 là một phân lớp của

ngoại lệ sqlite3. Lỗi toàn vẹn

Ngoại lệ được đưa ra khi tính toàn vẹn quan hệ của cơ sở dữ liệu bị ảnh hưởng, e. g. kiểm tra khóa ngoại không thành công. Nó là một phân lớp của

ngoại lệ sqlite3. Lỗi nội bộ

Ngoại lệ được đưa ra khi SQLite gặp lỗi nội bộ. Nếu vấn đề này xuất hiện, điều đó có thể cho biết có sự cố với thư viện SQLite thời gian chạy.

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
55 là một phân lớp của

ngoại lệ sqlite3. Lỗi lập trình

Ngoại lệ được đưa ra đối với lỗi lập trình API

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0, chẳng hạn như cung cấp sai số liên kết cho một truy vấn hoặc cố gắng vận hành trên một truy vấn đã đóng.
cur.execute["CREATE TABLE movie[title, year, score]"]
64 là một phân lớp của

ngoại lệ sqlite3. Lỗi NotSupported

Ngoại lệ được đưa ra trong trường hợp API phương thức hoặc cơ sở dữ liệu không được hỗ trợ bởi thư viện SQLite bên dưới. Ví dụ: đặt hàm xác định thành

cur = con.cursor[]
06 trong , nếu thư viện SQLite cơ bản không hỗ trợ các hàm xác định.
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
63 là một phân lớp của

Các loại SQLite và Python

SQLite nguyên bản hỗ trợ các loại sau.

cur = con.cursor[]
37,
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
66,
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
67,
cur.execute["CREATE TABLE movie[title, year, score]"]
53,
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
69

Do đó, các loại Python sau đây có thể được gửi tới SQLite mà không gặp vấn đề gì

loại trăn

loại SQLite

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3

cur = con.cursor[]
37

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
66

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
67

cur.execute["CREATE TABLE movie[title, year, score]"]
53

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
69

Đây là cách các loại SQLite được chuyển đổi thành các loại Python theo mặc định

loại SQLite

loại trăn

cur = con.cursor[]
37

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
66

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
67

cur.execute["CREATE TABLE movie[title, year, score]"]
53

phụ thuộc vào, theo mặc định

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
69

Hệ thống loại của mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 có thể mở rộng theo hai cách. bạn có thể lưu trữ các loại Python bổ sung trong cơ sở dữ liệu SQLite qua và bạn có thể để mô-đun
cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 chuyển đổi các loại SQLite thành các loại Python qua

Bộ điều hợp và bộ chuyển đổi mặc định

Có các bộ điều hợp mặc định cho các loại ngày và giờ trong mô-đun ngày giờ. Chúng sẽ được gửi dưới dạng ngày ISO/dấu thời gian ISO tới SQLite

Bộ chuyển đổi mặc định được đăng ký dưới tên “ngày” cho và dưới tên “dấu thời gian” cho

Bằng cách này, bạn có thể sử dụng ngày/dấu thời gian từ Python mà không cần thêm bất kỳ thao tác nào trong hầu hết các trường hợp. Định dạng của bộ điều hợp cũng tương thích với các hàm ngày/giờ SQLite thử nghiệm

Ví dụ sau minh họa điều này

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
1

Nếu dấu thời gian được lưu trữ trong SQLite có phần phân số dài hơn 6 số, thì giá trị của dấu thời gian đó sẽ bị bộ chuyển đổi dấu thời gian cắt ngắn thành độ chính xác micro giây

Ghi chú

Trình chuyển đổi “dấu thời gian” mặc định bỏ qua các giá trị bù UTC trong cơ sở dữ liệu và luôn trả về một đối tượng ngây thơ. Để duy trì độ lệch UTC trong dấu thời gian, hãy tắt bộ chuyển đổi hoặc đăng ký bộ chuyển đổi nhận biết độ lệch với

Làm thế nào để hướng dẫn

Cách sử dụng trình giữ chỗ để liên kết các giá trị trong truy vấn SQL

Các hoạt động SQL thường cần sử dụng các giá trị từ các biến Python. Tuy nhiên, hãy cẩn thận khi sử dụng các thao tác chuỗi của Python để lắp ráp các truy vấn, vì chúng dễ bị tấn công SQL injection. Ví dụ: kẻ tấn công có thể chỉ cần đóng một trích dẫn và đưa vào

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
97 để chọn tất cả các hàng

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
2

Thay vào đó, hãy sử dụng thay thế tham số của DB-API. Để chèn một biến vào một chuỗi truy vấn, hãy sử dụng một trình giữ chỗ trong chuỗi và thay thế các giá trị thực vào truy vấn bằng cách cung cấp chúng dưới dạng một trong các giá trị cho đối số thứ hai của phương thức của con trỏ

Một câu lệnh SQL có thể sử dụng một trong hai loại trình giữ chỗ. dấu chấm hỏi [kiểu qmark] hoặc trình giữ chỗ được đặt tên [kiểu được đặt tên]. Đối với kiểu qmark, tham số phải là a có độ dài phải khớp với số lượng chỗ dành sẵn hoặc a được nâng lên. Đối với kiểu được đặt tên, các tham số phải là một phiên bản của [hoặc một lớp con], phải chứa các khóa cho tất cả các tham số được đặt tên; . Đây là một ví dụ về cả hai phong cách

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
3

Ghi chú

Trình giữ chỗ số PEP 249 không được hỗ trợ. Nếu được sử dụng, chúng sẽ được hiểu là trình giữ chỗ được đặt tên

Cách điều chỉnh các loại Python tùy chỉnh thành các giá trị SQLite

SQLite chỉ hỗ trợ một tập hợp các loại dữ liệu hạn chế. Để lưu trữ các loại Python tùy chỉnh trong cơ sở dữ liệu SQLite, hãy điều chỉnh chúng theo một trong các

Có hai cách để điều chỉnh các đối tượng Python thành các kiểu SQLite. để đối tượng của bạn tự điều chỉnh hoặc sử dụng bộ điều hợp có thể gọi được. Cái sau sẽ được ưu tiên hơn cái trước. Đối với một thư viện xuất một loại tùy chỉnh, có thể hợp lý khi cho phép loại đó tự điều chỉnh. Với tư cách là nhà phát triển ứng dụng, việc kiểm soát trực tiếp bằng cách đăng ký các chức năng của bộ điều hợp tùy chỉnh có thể hợp lý hơn

Cách viết các đối tượng có thể thích ứng

Giả sử chúng ta có một lớp

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
02 đại diện cho một cặp tọa độ,
>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
03 và
>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
04, trong hệ tọa độ Descartes. Cặp tọa độ sẽ được lưu trữ dưới dạng chuỗi văn bản trong cơ sở dữ liệu, sử dụng dấu chấm phẩy để phân tách tọa độ. Điều này có thể được thực hiện bằng cách thêm phương thức
>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
05 trả về giá trị đã điều chỉnh. Đối tượng được chuyển đến giao thức sẽ thuộc loại

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
4

Cách đăng ký bộ điều hợp có thể gọi được

Khả năng khác là tạo một hàm chuyển đổi đối tượng Python thành loại tương thích với SQLite. Chức năng này sau đó có thể được đăng ký bằng cách sử dụng

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
5

Cách chuyển đổi các giá trị SQLite thành các loại Python tùy chỉnh

Viết một bộ điều hợp cho phép bạn chuyển đổi từ các loại Python tùy chỉnh sang các giá trị SQLite. Để có thể chuyển đổi từ các giá trị SQLite sang các loại Python tùy chỉnh, chúng tôi sử dụng trình chuyển đổi

Hãy quay trở lại lớp học

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
02. Chúng tôi đã lưu trữ tọa độ x và y được phân tách bằng dấu chấm phẩy dưới dạng chuỗi trong SQLite

Đầu tiên, chúng ta sẽ định nghĩa một hàm chuyển đổi chấp nhận chuỗi làm tham số và xây dựng một đối tượng

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
02 từ nó

Ghi chú

Các hàm chuyển đổi luôn được truyền một đối tượng, bất kể kiểu dữ liệu SQLite cơ bản

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
6

Bây giờ chúng ta cần báo cho

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 khi nào nó nên chuyển đổi một giá trị SQLite nhất định. Điều này được thực hiện khi kết nối với cơ sở dữ liệu, sử dụng tham số detect_types của. Có ba lựa chọn

  • ngầm định. đặt detect_types thành

  • rõ ràng. đặt detect_types thành

  • Cả hai. đặt detect_types thành

    >>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
    >>> res.fetchone[] is None
    True
    
    15. Tên cột được ưu tiên hơn các loại đã khai báo

Ví dụ sau minh họa các cách tiếp cận ngầm và rõ ràng

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
7

Công thức bộ chuyển đổi và bộ chuyển đổi

Phần này hiển thị công thức cho các bộ điều hợp và bộ chuyển đổi phổ biến

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
8

Cách sử dụng các phương pháp phím tắt kết nối

Sử dụng các phương thức , và của lớp, mã của bạn có thể được viết chính xác hơn vì bạn không phải tạo các đối tượng [thường là thừa] một cách rõ ràng. Thay vào đó, các đối tượng được tạo hoàn toàn và các phương thức tắt này trả về các đối tượng con trỏ. Bằng cách này, bạn có thể thực thi một câu lệnh

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
8 và lặp lại nó trực tiếp chỉ bằng một lệnh gọi duy nhất trên đối tượng

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
9

Cách sử dụng trình quản lý bối cảnh kết nối

Một đối tượng có thể được sử dụng làm trình quản lý ngữ cảnh tự động chuyển giao hoặc khôi phục các giao dịch đang mở khi rời khỏi phần thân của trình quản lý ngữ cảnh. Nếu phần thân của câu lệnh kết thúc mà không có ngoại lệ, giao dịch được cam kết. Nếu cam kết này không thành công hoặc nếu phần thân của câu lệnh

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
25 đưa ra một ngoại lệ chưa được phát hiện, giao dịch sẽ được khôi phục

Nếu không có giao dịch mở nào khi rời khỏi phần thân của câu lệnh

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
25, trình quản lý bối cảnh không hoạt động

Ghi chú

Trình quản lý bối cảnh không ngầm mở một giao dịch mới cũng như không đóng kết nối

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
0

Cách làm việc với SQLite URI

Một số thủ thuật URI hữu ích bao gồm

  • Mở cơ sở dữ liệu ở chế độ chỉ đọc

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
1

  • Không ngầm tạo một tệp cơ sở dữ liệu mới nếu nó chưa tồn tại;

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
2

  • Tạo cơ sở dữ liệu trong bộ nhớ có tên dùng chung

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
3

Bạn có thể tìm thêm thông tin về tính năng này, bao gồm danh sách các tham số trong tài liệu SQLite URI

Cách tạo và sử dụng row factory

Theo mặc định,

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 đại diện cho mỗi hàng dưới dạng một. Nếu
con.commit[]
9 không phù hợp với nhu cầu của bạn, bạn có thể sử dụng lớp hoặc tùy chỉnh

Mặc dù

cur.execute["CREATE TABLE movie[title, year, score]"]
47 tồn tại dưới dạng một thuộc tính cả trên và trên , nhưng bạn nên đặt , vì vậy tất cả các con trỏ được tạo từ kết nối sẽ sử dụng cùng một hàng.

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
21 cung cấp quyền truy cập được đặt tên theo chỉ mục và phân biệt chữ hoa chữ thường đối với các cột, với chi phí bộ nhớ tối thiểu và tác động hiệu suất đối với một
con.commit[]
9. Để sử dụng
>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
21 làm nhà sản xuất hàng, hãy gán nó cho thuộc tính
cur.execute["CREATE TABLE movie[title, year, score]"]
47

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
4

Các truy vấn hiện trả về

>>> res = cur.execute["SELECT name FROM sqlite_master"]
>>> res.fetchone[]
['movie',]
21 đối tượng

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
5

Bạn có thể tạo tùy chỉnh trả về mỗi hàng dưới dạng , với tên cột được ánh xạ tới giá trị

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
6

Sử dụng nó, các truy vấn hiện trả về một

cur.execute["CREATE TABLE movie[title, year, score]"]
62 thay vì một
con.commit[]
9

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
7

Nhà máy sản xuất hàng sau trả về một

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
8

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
47 có thể được sử dụng như sau

>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
9

Với một số điều chỉnh, công thức trên có thể được điều chỉnh để sử dụng lớp , hoặc bất kỳ lớp tùy chỉnh nào khác, thay vì lớp

Giải trình

kiểm soát giao dịch

Mô-đun

cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 không tuân theo quy trình xử lý giao dịch được đề xuất bởi PEP 249

Nếu thuộc tính kết nối không phải là

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3, các giao dịch mới được mở ngầm trước đó và thực hiện các câu lệnh
>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
4,
cur.execute["CREATE TABLE movie[title, year, score]"]
69,
cur.execute["CREATE TABLE movie[title, year, score]"]
70 hoặc
cur.execute["CREATE TABLE movie[title, year, score]"]
71; . Sử dụng các phương thức và để tương ứng cam kết và khôi phục các giao dịch đang chờ xử lý. Bạn có thể chọn cơ sở — nghĩa là, liệu và loại câu lệnh
>>> res = cur.execute["SELECT name FROM sqlite_master WHERE name='spam'"]
>>> res.fetchone[] is None
True
61
cur.execute["""
    INSERT INTO movie VALUES
        ['Monty Python and the Holy Grail', 1975, 8.2],
        ['And Now for Something Completely Different', 1971, 7.5]
"""]
0 có thực thi ngầm hay không và loại nào — thông qua thuộc tính

Nếu được đặt thành

>>> res = cur.execute["SELECT score FROM movie"]
>>> res.fetchall[]
[[8.2,], [7.5,]]
3, không có giao dịch nào được mở hoàn toàn. This leaves the underlying SQLite library in , but also allows the user to perform their own transaction handling using explicit SQL statements. Chế độ autocommit của thư viện SQLite cơ bản có thể được truy vấn bằng thuộc tính

Phương thức hoàn toàn cam kết bất kỳ giao dịch đang chờ xử lý nào trước khi thực thi tập lệnh SQL đã cho, bất kể giá trị của

Làm cách nào để nhập CSV vào SQLite bằng python?

Pandas giúp dễ dàng tải dữ liệu CSV này vào bảng sqlite. .
nhập gấu trúc dưới dạng pd
# tải dữ liệu vào Pandas DataFrame
người dùng = pd. read_csv['người dùng. csv']
# ghi dữ liệu vào bảng sqlite
người dùng. to_sql['users', conn, if_exists='append', index = False]

Làm cách nào để đọc dữ liệu từ cơ sở dữ liệu SQLite trong python?

Bạn có thể tìm nạp dữ liệu từ MYSQL bằng cách sử dụng phương thức fetch[] do mô-đun python sqlite cung cấp . sqlite3. Lớp con trỏ cung cấp ba phương thức là fetchall[], fetchmany[] và, fetchone[] trong đó Phương thức fetchall[] truy xuất tất cả các hàng trong tập kết quả của một truy vấn và trả về chúng dưới dạng danh sách các bộ dữ liệu.

Làm cách nào để chèn dữ liệu vào cơ sở dữ liệu SQLite?

SQLite INSERT – chèn một hàng vào bảng .
Đầu tiên, chỉ định tên của bảng mà bạn muốn chèn dữ liệu sau từ khóa INSERT INTO
Thứ hai, thêm danh sách các cột được phân tách bằng dấu phẩy sau tên bảng. Danh sách cột là tùy chọn. .
Thứ ba, thêm danh sách các giá trị được phân tách bằng dấu phẩy sau từ khóa GIÁ TRỊ

Làm cách nào để nhập tệp CSV vào SQLite?

Đầu tiên, từ menu chọn mục menu công cụ. Thứ hai, chọn cơ sở dữ liệu và bảng mà bạn muốn nhập dữ liệu rồi nhấp vào nút Tiếp theo. Thứ ba, chọn CSV làm loại nguồn dữ liệu, chọn tệp CSV trong trường Tệp đầu vào và chọn tùy chọn ,[dấu phẩy] làm Dấu tách trường như minh họa trong hình bên dưới

Chủ Đề