SQLite là một cơ sở dữ liệu mã nguồn mở và không có máy chủ, không cần cấu hình. Toàn bộ cơ sở dữ liệu là một tệp đĩa duy nhất có thể được đặt ở bất kỳ đâu trong hệ thống tệp của hệ điều hành. Các lệnh SQLite tương tự như SQL tiêu chuẩn. SQLite được sử dụng rộng rãi bởi các ứng dụng như trình duyệt để lưu trữ dữ liệu nội bộ. Nó cũng là nơi lưu trữ dữ liệu thuận tiện cho các thiết bị nhúng.
Thư viện Python tiêu chuẩn có hỗ trợ tích hợp cho kết nối cơ sở dữ liệu SQLite. Nó chứa mô-đun sqlite3 là mô-đun tuân thủ DB-API V2 do Gerhad Haring viết. Nó tuân theo DB-API 2.0.
DB-API đã được xác định theo PEP-249 để đảm bảo sự tương đồng giữa các mô-đun Python được sử dụng để truy cập các sản phẩm cơ sở dữ liệu khác nhau.
Bước đầu tiên trong quá trình xử lý cơ sở dữ liệu là lấy một đối tượng kết nối đại diện cho cơ sở dữ liệu. Tiếp theo bằng cách sử dụng kết nối, lấy một đối tượng con trỏ. Một đối tượng con trỏ tương tự như khái niệm về trình lặp. Nó được sử dụng để xử lý các hàng riêng lẻ được trả về bởi các truy vấn cơ sở dữ liệu. Một con trỏ có thể được xem như một con trỏ đến một hàng trong một tập hợp các hàng.
Đối tượng con trỏ giúp thực hiện các truy vấn SQL để thực hiện các hoạt động CRUD trên cơ sở dữ liệu bên dưới.
Hàm Connect ()
Hàm này trong mô-đun sqlite3 trả về đối tượng kết nối đại diện cho cơ sở dữ liệu hiện có trên đĩa hoặc mở cơ sở dữ liệu mới nếu nó chưa tồn tại.
import sqlite3 conn=sqlite3.connect('mydb.sqlite3')
SQLite hỗ trợ tạo cơ sở dữ liệu trong bộ nhớ. Sử dụng tên đặc biệt ':memory:' cho mục đích đó
conn=sqlite3.connect(':memory:')
Các phương thức sau được định nghĩa trong lớp Kết nối
con trỏ () Phương thức này trả về đối tượng con trỏ.
cur=conn.cursor()
cam kết () - Phương thức này liên tục cam kết các giao dịch vào đĩa.
khôi phục () - Phương thức này cuộn lại các giao dịch để khôi phục trạng thái cơ sở dữ liệu cho lần gọi cuối cùng tới commit (). Phương pháp này đảm bảo tính nhất quán của dữ liệu trong trường hợp ngoại lệ trong các giao dịch SQL.
try: conn.commit() except: conn.rollback()
thực thi () - Tạo con trỏ một cách ngầm và gọi phương thức execute () của nó
thi hành () - Phương thức này hoàn toàn tạo ra con trỏ và gọi phương thức thi hành của nó
create_ function () - Phương pháp này tạo một hàm do người dùng xác định mà sau này bạn có thể sử dụng từ bên trong các câu lệnh SQL.
create_aggregate () - Phương pháp này tạo ra một hàm tổng hợp.
iterdump () - Phương pháp này tạo một kết xuất cơ sở dữ liệu ở định dạng văn bản SQL.
import sqlite3 con = sqlite3.connect('mydb.sqlite3') f = dump.sql', 'w') for line in con.iterdump(): f.write('%s\n' % line)
sao lưu () - Phương pháp này tạo bản sao lưu cơ sở dữ liệu SQLite ngay cả khi nó đang được truy cập.
source = sqlite3.connect('mydb.sqlite3') dest = sqlite3.connect(':memory:') source.backup(dest)
đối tượng con trỏ
Con trỏ thu được từ đối tượng kết nối tạo điều kiện thuận lợi cho việc thực hiện các hoạt động SQL khác nhau trên cơ sở dữ liệu bằng cách sử dụng phương thức execute (). Ví dụ:câu lệnh sau tạo một bảng trong cơ sở dữ liệu hiện tại
cur = conn.cursor() cur.execute("CREATE TABLE guests ( ID INTEGER PRIMARY KEY, name TEXT (20) NOT NULL, address TEXT (40), city TEXT (20) );"
Sau đây chèn một bản ghi trong bảng
cur.execute('''INSERT INTO GUESTS VALUES(1,'RAJU','ABIDS', 'HYDERABAD');''')
Sử dụng phương thức executeutemany () để thực hiện thao tác bổ sung hàng loạt
addreses=[(2,'KISHAN', 'TILAK ROAD', 'PUNE'), (3, 'LATA', 'GAANDHI NAGAR', 'AURANGABAD')] sql='INSERT INTO GUESTS VALUES (:ID, :NAME, :ADD, :CITY)' cur.executemany(sql, addreses)
Truy vấn SELECT tạo thành một tập hợp kết quả chứa tất cả các bản ghi được trả về dưới dạng phản hồi cho truy vấn. Phương thức execute () sử dụng một chuỗi biểu diễn câu lệnh truy vấn SELECT. Có hai phương thức trong DB-API để truy xuất các hàng trong con trỏ đại diện cho tập kết quả.
fetchone () - Tìm nạp bản ghi có sẵn tiếp theo từ tập hợp kết quả dưới dạng một bộ giá trị bao gồm các giá trị của mỗi cột của bản ghi được tìm nạp.
fetchall () - Tìm nạp tất cả các bản ghi còn lại dưới dạng danh sách các bộ giá trị. Mỗi bộ tương ứng với một hàng và chứa các giá trị của mỗi cột trong bảng.
Đoạn mã sau sử dụng phương thức fetchone () để liệt kê tất cả các bản ghi trong bảng khách
sql = "SELECT * from guests;" cur = db.cursor() cur.execute(sql) while True: record=cur.fetchone() if record==None: break print (record)
Việc sử dụng phương thức fetchall () được minh họa bằng câu lệnh sau
sql = "SELECT * from guests;" cur = db.cursor() cur.execute(sql) set = cur.fetchall() for record in set: print (record)
Kiểu SQLite và Python
Các kiểu dữ liệu SQLite theo mặc định được ánh xạ tới các kiểu dữ liệu Python tương đương theo bảng sau
Loại Python | Kiểu SQLite |
---|---|
Không có | NULL |
int | INTEGER |
float | REAL |
str | TEXT |
byte | BLOB |
Ngoại lệ
DB-API xác định các ngoại lệ sau đối với các hoạt động SQL với cơ sở dữ liệu SQLite -
DatabaseError | Ngoại lệ được đưa ra cho các lỗi liên quan đến cơ sở dữ liệu. |
IntegrityError | 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, ví dụ:kiểm tra khóa ngoại không thành công. Nó là một lớp con của DatabaseError. |
Lập trìnhError | Ngoại lệ được đưa ra do lỗi lập trình, ví dụ:không tìm thấy hoặc đã tồn tại bảng, lỗi cú pháp trong câu lệnh SQL, số lượng tham số được chỉ định sai, v.v. |
OperationalError | Ngoại lệ được đặt 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 người lập trình, |
NotSupportedError | Ngoại lệ được đưa ra trong trường hợp sử dụng một phương thức hoặc API cơ sở dữ liệu không được cơ sở dữ liệu hỗ trợ. |