Python có một mô-đun Sqlite3 tích hợp có tên là
from sqlite3 import connect
db = connect['test.db']
db.close[]
1. Mô-đun này cho phép bạn tạo, kết nối và sửa đổi cơ sở dữ liệu SQLite 3Để tìm hiểu thêm về SQLite3 và cách sử dụng nó nói chung, hãy xem Hướng dẫn SQLite3 của tôi và các hướng dẫn sqlite khác của tôi
Nếu bạn cần một thư viện bất khả tri về cơ sở dữ liệu, thứ mà bạn có thể sử dụng với SQLite và sau đó dễ dàng định cấu hình để bắt đầu sử dụng MySQL mà không cần viết lại tất cả mã của mình, thì bạn nên sử dụng ORM. ORM là viết tắt của Object-Relational-Mapping và cái phổ biến nhất cho Python là SQLAlchemy và Django's ORM
Cài đặt
Gói
from sqlite3 import connect
db = connect['test.db']
db.close[]
1 đi kèm với thư viện chuẩn Python nên không cần cài đặt thêmNhận tài liệu
Bạn có thể đọc tài liệu API cục bộ bằng cách chạy
from sqlite3 import connect
db = connect['test.db']
db.close[]
3, sau đó sử dụng trình duyệt web của mình để xem chi tiết gói from sqlite3 import connect
db = connect['test.db']
db.close[]
1# Run then open browser //localhost:9999 and find sqlite
pydoc -p 9999
Bạn cũng có thể đọc hướng dẫn trực tuyến trong tài liệu Python chính thức tại. https. // tài liệu. con trăn. org/3/library/sqlite3. html
Mở hoặc tạo cơ sở dữ liệu
Cơ sở dữ liệu SQLite3 là các tệp độc lập duy nhất thường kết thúc bằng phần mở rộng
from sqlite3 import connect
db = connect['test.db']
db.close[]
5. Nếu tệp cơ sở dữ liệu không tồn tại khi bạn cố gắng kết nối, nó sẽ tạo tệpfrom sqlite3 import connect
db = connect['test.db']
db.close[]
Cơ sở dữ liệu chỉ bộ nhớ
Việc tạo cơ sở dữ liệu chỉ trong bộ nhớ sẽ không tồn tại giữa các lần chạy, nhưng có thể hữu ích nếu bạn chỉ cần lưu trữ thông tin trong khi chạy. Để làm điều đó, bạn chỉ cần thay thế tên tệp bằng
from sqlite3 import connect
db = connect['test.db']
db.close[]
6 khi mở cơ sở dữ liệu________số 8_______Sao lưu cơ sở dữ liệu
Nếu bạn quyết định muốn lưu trữ cơ sở dữ liệu từ bộ nhớ vào một tệp, bạn có thể sử dụng chức năng. Hàm
from sqlite3 import connect
db = connect['test.db']
db.close[]
7 về cơ bản sao chép cơ sở dữ liệu này sang cơ sở dữ liệu khác. Bạn có thể sử dụng nó để lấy một cơ sở dữ liệu bộ nhớ và lưu trữ nó trong một tệp, nhưng bạn cũng có thể làm ngược lại, nghĩa là "sao lưu" cơ sở dữ liệu từ một tệp vào cơ sở dữ liệu from sqlite3 import connect
db = connect['test.db']
db.close[]
6, tạo một bản sao trong bộ nhớ mà không cần tải trực tiếp/ Ví dụ đầu tiên này cho thấy cách sao lưu cơ sở dữ liệu bộ nhớ vào một tệp
from sqlite3 import connect
# Backup a memory database to a file
memory_db = connect[':memory:']
backup_db = connect['my_backup.db']
memory_db.backup[backup_db]
memory_db.close[]
backup_db.close[]
Ví dụ này cho thấy cách lấy nội dung của cơ sở dữ liệu trên đĩa và tải nó vào bộ nhớ. Điều này khác với việc tải tệp trực tiếp khi các câu lệnh SQL sẽ thay đổi tệp. Điều này tạo ra một bản sao duy nhất của cơ sở dữ liệu vào bộ nhớ tách biệt với tệp trên đĩa
from sqlite3 import connect
# Load the contents of a database file on disk to a
# transient copy in memory without modifying the file
disk_db = connect['my.db']
memory_db = connect[':memory:']
disk_db.backup[memory_db]
disk_db.close[]
# Now use `memory_db` without modifying disk db
memory_db.close[]
Lưu ý rằng nếu bạn không tích cực sử dụng cơ sở dữ liệu, bạn có thể sao chép tệp cơ sở dữ liệu một cách an toàn và bạn không phải sử dụng phương pháp
from sqlite3 import connect
db = connect['test.db']
db.close[]
7 nàythực hiện báo cáo
Để thực thi câu lệnh SQL, hãy sử dụng phương thức
from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
0 trên con trỏ cơ sở dữ liệuTùy thuộc vào loại tuyên bố, bạn sẽ nhận lại
from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
1 hoặc các đối tượng. Bạn có thể sử dụng from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
2, from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
3 và from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
4 để lấy kết quả. Chúng ta sẽ xem xét các ví dụ ngay sau đâyLưu ý rằng gói sqlite3 của Python theo mặc định được định cấu hình với các giao dịch được bật, do đó bạn phải cam kết thay đổi cơ sở dữ liệu để chúng tồn tại
Tạo bảng
Bạn có thể tạo bảng bằng câu lệnh
from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
5 hoặc bạn có thể đảm bảo bảng được tạo bằng câu lệnh from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
6. Ví dụ này cho thấy cách mở cơ sở dữ liệu và tạo bảng nếu nó không tồn tạiChỉ có một vài kiểu dữ liệu Sqlite3
7 - Giá trị rỗngfrom sqlite3 import connect # For an in-memory only database: db = connect[':memory:'] db.close[]
8 - Số nguyên cơ bảnfrom sqlite3 import connect # For an in-memory only database: db = connect[':memory:'] db.close[]
9 - Dấu phẩy động 64 bitfrom sqlite3 import connect # For an in-memory only database: db = connect[':memory:'] db.close[]
0 - Chuỗifrom sqlite3 import connect # Backup a memory database to a file memory_db = connect[':memory:'] backup_db = connect['my_backup.db'] memory_db.backup[backup_db] memory_db.close[] backup_db.close[]
1 - Dữ liệu nhị phân hoặc dữ liệu thôfrom sqlite3 import connect # Backup a memory database to a file memory_db = connect[':memory:'] backup_db = connect['my_backup.db'] memory_db.backup[backup_db] memory_db.close[] backup_db.close[]
from sqlite3 import connect
db_connection = connect['test.db']
db_cursor = db_connection.cursor[]
statement = 'CREATE TABLE IF NOT EXISTS users [username TEXT, email TEXT]'
db_cursor.execute[statement] # Returns None on create table
db_cursor.close[]
db_connection.close[]
Lưu ý quan trọng. Câu lệnh
from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
5 không yêu cầu cam kết, nhưng hãy nhớ rằng Python sqlite3 là giao dịch thủ công theo mặc định nên các câu lệnh chèn sau sẽ cần được cam kếtCác câu lệnh được tham số hóa
Khi xây dựng các câu lệnh, bạn có thể muốn chèn các biến. Việc tự nối chuỗi có thể rất nguy hiểm, khiến bạn gặp phải các cuộc tấn công SQL injection
Có hai cách để tham số hóa các câu lệnh của bạn để chèn các biến một cách an toàn. Một là sử dụng dấu chấm hỏi
from sqlite3 import connect
# Backup a memory database to a file
memory_db = connect[':memory:']
backup_db = connect['my_backup.db']
memory_db.backup[backup_db]
memory_db.close[]
backup_db.close[]
3 làm chỗ dành sẵn và cách khác là sử dụng chỗ dành sẵn có tên ở dạng from sqlite3 import connect
# Backup a memory database to a file
memory_db = connect[':memory:']
backup_db = connect['my_backup.db']
memory_db.backup[backup_db]
memory_db.close[]
backup_db.close[]
4. Hãy xem xét một ví dụ về mỗifrom sqlite3 import connect
db = connect['test.db']
cursor = db.cursor[]
# Simple question mark placeholder
statement = 'UPDATE users SET email=? WHERE username=?'
data = ['nanodano@devdungeon.com', 'nanodano']
cursor.execute[statement, data]
# Named placeholders
statement = statement = 'UPDATE users SET email=:email WHERE username=:username'
data = {
'email': 'nanodano@devdungeon.com',
'username': 'nanodano'
}
cursor.execute[statement, data]
db.commit[]
Chèn hàng
Để chèn hàng, bạn gọi
from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
0 giống như bạn làm với bất kỳ câu lệnh SQL nào khácVí dụ này cho biết cách chèn hàng vào cơ sở dữ liệu và cách lấy ID hàng của hàng cuối cùng được chèn
from sqlite3 import connect
db = connect['test.db']
cursor = db.cursor[]
cursor.execute['CREATE TABLE IF NOT EXISTS users [username TEXT, email TEXT]']
cursor.execute['INSERT INTO users [username, email] VALUES ["admin", "admin@devdungeon.com"]']
cursor.execute['INSERT INTO users [username, email] VALUES ["nanodano", "nanodano@devdungeon.com"]']
print[cursor.lastrowid] # Id of inserted row
# IMPORTANT!
# Until you commit, the changes will not be saved, only in memory!
db.commit[]
Để chèn nhiều hàng cùng một lúc, bạn có thể sử dụng
from sqlite3 import connect
# Backup a memory database to a file
memory_db = connect[':memory:']
backup_db = connect['my_backup.db']
memory_db.backup[backup_db]
memory_db.close[]
backup_db.close[]
6from sqlite3 import connect
db = connect['test.db']
cursor = db.cursor[]
cursor.execute['CREATE TABLE IF NOT EXISTS users [username TEXT, email TEXT]']
row_data = [
['admin', 'admin@devdungeon.com'],
['nanodano', 'nanodano@devdungeon.com']
]
cursor.executemany["INSERT INTO users [username, email] VALUES [?, ?]", row_data]
db.commit[]
Truy vấn cho các hàng
Ví dụ này cho thấy cách tìm nạp kết quả từ cơ sở dữ liệu. Khi bạn tìm nạp kết quả, bạn có một số tùy chọn để sử dụng dữ liệu. Bạn có thể lặp lại dữ liệu bằng vòng lặp
from sqlite3 import connect
# Backup a memory database to a file
memory_db = connect[':memory:']
backup_db = connect['my_backup.db']
memory_db.backup[backup_db]
memory_db.close[]
backup_db.close[]
7 hoặc bạn có thể sử dụng from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
2, from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
3 hoặc from sqlite3 import connect
# For an in-memory only database:
db = connect[':memory:']
db.close[]
4 để trích xuất kết quả. Ví dụ này cho thấy cả hai phương phápTheo mặc định, con trỏ cơ sở dữ liệu sẽ trả về các bộ có dữ liệu hàng. Ví dụ đầu tiên chứng minh các bộ dữ liệu rất hiệu quả. Ví dụ tiếp theo sẽ chỉ ra cách sử dụng
from sqlite3 import connect
# Load the contents of a database file on disk to a
# transient copy in memory without modifying the file
disk_db = connect['my.db']
memory_db = connect[':memory:']
disk_db.backup[memory_db]
disk_db.close[]
# Now use `memory_db` without modifying disk db
memory_db.close[]
1 làm nhà sản xuất hàng để cung cấp cho bạn các đối tượng kết quả giống như từ điểnfrom sqlite3 import connect
# Db setup
db = connect['test.db']
cursor = db.cursor[]
cursor.execute['CREATE TABLE IF NOT EXISTS users [username TEXT, email TEXT]']
cursor.execute['INSERT INTO users [username, email] VALUES ["nanodano", "nanodano@devdungeon.com"]']
db.commit[]
# Query for rows and then iterate through results
rows = cursor.execute['SELECT * FROM users LIMIT 100']
print[type[rows]] # sqlite3.Cursor
for row in rows:
print[type[row]] # tuple
print[row]
# Query for rows and then use `fetchall[]` to get as a list
rows = cursor.execute['SELECT * FROM users ORDER BY username ASC']
all_rows = rows.fetchall[] # Get a list of rows as tuples
print[all_rows]
# Or fetch a specific amount of rows with `fetchmany[]`
some_rows = rows.fetchmany[1]
# Or fetch a single row with `fetchone[]`
row_id = rows.fetchone[]
# Db cleanup
cursor.close[]
db.close[]
Ví dụ này chỉ cho bạn cách sử dụng một nhà máy sản xuất hàng khác sẽ cung cấp cho bạn một công cụ cho phép bạn truy cập các trường bằng cách sử dụng các phím không phân biệt chữ hoa chữ thường cũng như cung cấp hàm
from sqlite3 import connect
# Load the contents of a database file on disk to a
# transient copy in memory without modifying the file
disk_db = connect['my.db']
memory_db = connect[':memory:']
disk_db.backup[memory_db]
disk_db.close[]
# Now use `memory_db` without modifying disk db
memory_db.close[]
2 để lấy danh sách các cột theo thứ tự. Phương pháp này thuận tiện hơn khi sử dụng với tư cách là lập trình viên, nhưng kém hiệu quả hơn so với sử dụng định dạng bộ dữ liệu mặc định từ ví dụ trướcfrom sqlite3 import connect
db = connect['test.db']
db.close[]
0xử lý lỗi
Một số điều có thể sai khi làm việc với cơ sở dữ liệu sqlite3. Ví dụ: nếu có lỗi trong cú pháp SQL của bạn hoặc bạn cố gắng chèn một giá trị không hợp lệ
Bạn có thể xem tất cả trong tài liệu chính thức
Hầu hết các trường hợp ngoại lệ là các lớp con của
from sqlite3 import connect
# Load the contents of a database file on disk to a
# transient copy in memory without modifying the file
disk_db = connect['my.db']
memory_db = connect[':memory:']
disk_db.backup[memory_db]
disk_db.close[]
# Now use `memory_db` without modifying disk db
memory_db.close[]
3, nhưng một vài trường hợp là lớp con của from sqlite3 import connect
# Load the contents of a database file on disk to a
# transient copy in memory without modifying the file
disk_db = connect['my.db']
memory_db = connect[':memory:']
disk_db.backup[memory_db]
disk_db.close[]
# Now use `memory_db` without modifying disk db
memory_db.close[]
4 cơ bản. Đây là những trường hợp ngoại lệ bạn có thể mong đợi nếu có bất kỳ lỗi nào trong quá trình vận hành cơ sở dữ liệuPhần kết luận
Sau khi đọc phần này, bạn sẽ hiểu rõ về cách sử dụng SQLite3 trong Python cho các tác vụ cơ bản như tạo cơ sở dữ liệu, tạo bảng, chèn dữ liệu, cập nhật hàng, truy vấn dữ liệu và bắt ngoại lệ