SQLite Python trong bộ nhớ

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êm

Nhậ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ệp

from 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ày

thự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ệu

Tù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 đây

Lư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ại

Chỉ có một vài kiểu dữ liệu Sqlite3

  • from sqlite3 import connect
    
    # For an in-memory only database:
    db = connect[':memory:']
    
    db.close[]
    
    7 - Giá trị rỗng
  • from sqlite3 import connect
    
    # For an in-memory only database:
    db = connect[':memory:']
    
    db.close[]
    
    8 - Số nguyên cơ bản
  • from sqlite3 import connect
    
    # For an in-memory only database:
    db = connect[':memory:']
    
    db.close[]
    
    9 - Dấu phẩy động 64 bit
  • 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[]
    
    0 - Chuỗ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[]
    
    1 - Dữ liệu nhị phân hoặc dữ liệu thô
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ết

Cá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ỗi

from 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ác

Ví 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[]
6

from 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áp

Theo 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ển

from 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ước

from sqlite3 import connect

db = connect['test.db']

db.close[]
0

xử 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ệu

Phầ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ệ

SQLite có thể được sử dụng như trong

Cơ sở dữ liệu trong bộ nhớ SQLite là cơ sở dữ liệu được lưu trữ hoàn toàn trong bộ nhớ, không phải trên đĩa . Sử dụng tên tệp nguồn dữ liệu đặc biệt. trí nhớ. để tạo một cơ sở dữ liệu trong bộ nhớ. Khi kết nối bị đóng, cơ sở dữ liệu sẽ bị xóa. Khi đang sử dụng. trí nhớ. , mỗi kết nối tạo cơ sở dữ liệu riêng.

Làm cách nào để tạo trong bộ nhớ cơ sở dữ liệu SQLite Python?

Nếu bạn chuyển tên tệp thành. trí nhớ. đối với hàm connect[] của mô-đun sqlite3 , nó sẽ tạo cơ sở dữ liệu mới nằm trong bộ nhớ [RAM] thay vì tệp cơ sở dữ liệu trên đĩa.

Làm cách nào bạn có thể kết nối với cơ sở dữ liệu SQLite trong bộ nhớ bằng Python?

Triển khai từng bước .
Bước 1. Nhập mô-đun SQLite. .
Bước 2. Tạo kết nối. .
Bước 3. Tạo cơ sở dữ liệu trong bộ nhớ. .
Bước 4. Tạo con trỏ. .
Bước 5. Nhập lỗi từ SQLite. .
Bước 6. Cuối cùng đóng các kết nối

Làm cách nào để sử dụng SQLite trong bộ nhớ?

Cách phổ biến nhất để buộc cơ sở dữ liệu SQLite tồn tại hoàn toàn trong bộ nhớ là mở cơ sở dữ liệu bằng tên tệp đặc biệt ". trí nhớ. " . Nói cách khác, thay vì chuyển tên của tệp đĩa thực vào một trong các hàm sqlite3_open[], sqlite3_open16[] hoặc sqlite3_open_v2[], hãy chuyển chuỗi ". trí nhớ. ".

Chủ Đề