Trong bài này, chúng ta sẽ tìm hiểu về cách để chèn thêm dữ liệu người dùng vào trong cơ sở dữ liệu, bằng cách sử dụng các biến.
Ở đây, chúng ta đang sử dụng module sqlite để làm việc trên một cơ sở dữ liệu, nhưng trước đó, chúng ta cần phải import cái package đó vào project của mình đã.
import sqlite3
Để có thể thấy được tác dụng của việc thao tác ở mức cơ sở dữ liệu (database level), bạn hãy tải về công cụ SQLite browser database.
Lưu ý: Để mô tả các ví dụ một cách rõ ràng và đơn giản hơn, chúng tôi đã sử dụng một số giá trị cố định, tuy nhiên bạn có thể lấy các dữ liệu được nhập vào khác thay vì các giá trị mẫu đó.
Trong phần tiếp theo, chúng ta sẽ xem các bước để tạo và chèn thêm các biến vào trong cơ sở dữ liệu
Code #1: Tạo cơ sở dữ liệu
conn = sqlite3.connect('pythonDB.db')
c = conn.cursor()
Giải thích:
Ở đây, chúng ta đã khởi tạo cơ sở dữ liệu pythonDB.py. Câu lệnh đầu tiên sẽ tạo mới một cơ sở dữ liệu nếu cơ sở dữ liệu đó không tồn tại. Nếu đã tồn tại một cơ sở dữ liệu có cùng tên thì sẽ không tạo mới nữa. Trong câu lệnh thứ hai, chúng ta sử dụng một phương thức của module sqlite 3 có tên là cursor(), nó sẽ giúp bạn khởi tạo cơ sở dữ liệu và kích hoạt trạng thái active – đang hoạt động.
Các cursors (con trỏ cơ sở dữ liệu) được tạo ra bởi phương thức kết nối cursor(), chúng được ràng buộc với kết nối này trong toàn bộ thời gian tồn tại và tất cả các câu lệnh được thực thi trong ngữ cảnh của một phiên cơ sở dữ liệu cụ thể sẽ được đóng gói bởi kết nối này.
Code #2: Tạo bảng cơ sở dữ liệu
def create_table():
c.execute('CREATE TABLE IF NOT EXISTS RecordONE (Number REAL, Name TEXT)')
Giải thích:
Chúng ta đã tạo ra một hàm create_table. Hàm này sẽ giúp bạn tạo ra bảng cơ sở dữ liệu nếu bảng đó chưa tồn tại, bạn có thể thấy điều đó thông qua câu truy vấn cơ sở dữ liệu SQLite được truyền vào làm tham số cho hàm này. Lúc này chúng ta đã khởi tạo một bảng có tên RecordONE. Sau đó, chúng ta có thể truyền vào các tham số với số lượng tùy ý, chỉ cần khai báo các cặp tên thuộc tính đi kèm với kiểu dữ liệu của nó, trong ví dụ này chúng ta sử dụng kiểu REAL và kiểu TEXT.
Code #3: Chèn thêm dữ liệu vào bảng cơ sở dữ liệu
def data_entry():
number = 1234
name = "cafedev"
c.execute("INSERT INTO RecordONE (Number, Name) VALUES(?, ?)",
(number, name))
conn.commit()
Giải thích:
Chúng ta đã khai báo thêm một hàm nữa có tên là data_entry. Trong ví dụ này, chúng ta đang thử thêm các giá trị vào trong cơ sở dữ liệu, các giá trị này có thể thu được từ dữ liệu nhập vào của người dùng (user input), hoặc từ các biến. Chúng ta sử dụng phương thức execute() để thực thi câu truy vấn. Sau đó sử dụng phương thức commit() để lưu lại những thay đổi đã thực hiện ở trên.
Code #4: Việc gọi tới các phương thức và đóng kết nối cơ sở dữ liệu
create_table()
data_entry()
c.close()
conn.close()
Giải thích: Trong quá trình làm việc với cơ sở dữ liệu, chúng ta sẽ thường xuyên gọi tới các phương thức xử lý cơ sở dữ liệu, tuy nhiên, khi thực hiện xong các tác vụ cần thiết, chúng ta phải đóng lại kết nối tới cơ sở dữ liệu. Nếu không đóng lại kết nối tới cơ sở dữ liệu trong lần sử dụng trước đó, thì ta sẽ gặp lỗi và không thể mở lại kết nối tới cơ sở dữ liệu.
Cùng xem một ví dụ đầy đủ để dễ hình dung hơn:
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------
import sqlite3
conn = sqlite3.connect('pythonDB.db')
c = conn.cursor()
def create_table():
c.execute('CREATE TABLE IF NOT EXISTS RecordONE (Number REAL, Name TEXT)')
def data_entry():
number = 1234
name = "cafedev"
c.execute("INSERT INTO RecordONE (Number, Name) VALUES(?, ?)", (number, name))
conn.commit()
create_table()
data_entry()
c.close()
conn.close()
Kết quả in ra là:
Thử chèn thêm một giá trị nữa bằng cách sử dụng phương thức data_entry():
# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: cafedevn@gmail.com
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------
def data_entry():
number = 4321
name = "Author"
c.execute("INSERT INTO RecordONE (Number, Name) VALUES(?, ?)", (number, name))
conn.commit()
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
- Full series tự học Python từ cơ bản tới nâng cao tại đây nha.
- Ebook về python tại đây.
- Các series tự học lập trình khác
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!