Xây dựng app này sẽ giúp bạn hiểu hơn về cách tạo một bảng database và điền dữ liệu vào nó.
Python có hỗ trợ database tuyệt vời được tích hợp vào thư viện chuẩn của nó, vì thế, bạn có thể tạo và tương tác với một database mà không cần phải dựa vào framework bên ngoài như Django ORM.
SQLite gọn nhẹ và dễ dàng tích hợp vào Python. Hãy cùng nhau khám phá những quy tắc cơ bản của lập trình database trong Python qua việc phát triển một app đăng ký người dùng đơn giản.
Cách tạo database trong Python
Để tạo và tương tác với database trong Python, bạn cần hai nhân tố chính: connection và cursor.
Một kết nối giúp bạn kết nối database hiện có hoặc tạo mới. Đây là cách tạo một kết nối database trong Python với SQLite:
import sqlite3
# Kết nối một database mới
conn = sqlite3.connect('path/to/database.db')
# Đóng kết nối
conn.close()
Phương thức connect() lấy đường dẫn tới database hiện có. Nếu không có database ở đường dẫn cụ thể, nó sẽ tạo mới. Bạn nên đóng kết nối database khi đã hoàn tất tương tác với database đó.
Một con trỏ giúp bạn tương tác với database đã kết nối. Bạn sẽ dùng một con trỏ để triển khai các truy vấn SQL trong chương trình Python. Đây là cách tạo một con trỏ:
cursor = conn.cursor()
# Đóng con trỏ
cursor.close()
Bạn có thể tạo một con trỏ bằng cách gọi phương thức cursor() khi mở đối tượng kết nối.
Cách chạy một giao dịch database trong Python
Dùng con trỏ, bạn có thể chạy các lệnh, truy vấn hoặc tập lệnh SQL để đọc hoặc ghi dữ liệu hay thay đổi cấu trúc database.
Hiện có 3 phương thức chính mà bạn có thể dùng để triển khai một giao dịch database.
1. Cursor.execute. Phương thức này sẽ chạy một lệnh duy nhất. Đây là cách bạn dùng nó:
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
""")
Code này gọi phương thức execute trên một con trỏ, chuyển nó sang một chuỗi chứa một lệnh SQL.
2. Cursor.executemany. Phương thức này cho phép bạn chạy cùng một câu lệnh SQL nhiều lần, nhưng mỗi lần, các tham số sẽ khác nhau. Nó tính hai đối số: lệnh SQL và một iterable. Một cách dùng nó tốt là chèn cùng lúc nhiều đối tượng vào databse:
data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]
cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)
Code trên sử dụng phương thức executemany để chèn các giá trị vào database nhiều lần.
3. Cursor.executescript. Đúng như tên gọi, phương thức này sẽ triển khai một script SQL cho bạn. Bạn có thể viết các lệnh SQL trong một file khác và chạy chúng với phương thức executescript:
with open("path/to/script.sql") as file:
sql_script = file.read()
cursor.executescript(sql_script)
Cách xây dựng một app đăng ký bằng Python và SQLite3
Logic đằng sau app đăng ký liên quan tới việc lấy thông tin của người dùng bằng Python và lưu trữ chúng trong một database. Những bước này sẽ cho bạn thấy cách tạo một hệ thống đăng ký đơn giản với Python và SQLite3.
Bước 1: Kết nối tới database hiện có hoặc tạo mới
Bắt đầu bằng cách tạo một database cho ứng dụng của bạn hoặc kết nối tới database hiện có:
import sqlite3
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
# Code của ứng dụng ở đây
cursor.close()
conn.close()
Code trên tạo một đối tượng kết nối và con trỏ tương tác với database đã kết nối.
Bước 2: Tạo bảng cho người dùng
Bạn cần một bảng chứa dữ liệu mà người dùng cung cấp khi đăng ký. Đây là cách tạo mới bằng con trỏ:
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
first_name TEXT,
last_name TEXT,
email TEXT UNIQUE,
password TEXT
)
""")
conn.commit()
Code này sẽ tạo một bảng tên users nếu nó không tồn tại trong database. Nó tạo 4 cột trong bảng để chứa thông tin người dùng. Trường email này là duy nhất để ngăn người dùng tạo nhiều tài khoản với cùng một email.
Gọi conn.commit rất quan trọng để đưa truy vấn vào database. Nếu không có nó, database sẽ không có gì thay đổi.
Bước 3: Thu thập dữ liệu người dùng
Các hàm Python khiến việc tái sử dụng code trở nên dễ dàng, vì thế, ý tưởng tốt ở đây là tạo một hàm xử lý tính năng đăng ký. Hàm này thu thập họ tên, email và mật khẩu của người dùng.
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
Bước 4: Kiểm tra độ chính xác của mật khẩu
Chỉnh sửa hàm registrer_user để đảm bảo người dùng nhập cùng một mật khẩu 2 lần. Nếu không làm như vậy, bạn nên nhắc họ nhập lại mật khẩu. Bạn có thể đạt được điều đó bằng vòng lặp như thế này:
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")
while True:
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
# Kiểm tra độ chính xác của mật khẩu
if password1 == password2:
print("You have successfully registered!")
break
else:
print("Your passwords must match")
Với thay đổi này, người dùng không thể đăng ký, trừ khi mật khẩu trùng khớp.
Bước 5: Kiểm tra độ độc đáo của email
Lệnh SQL tạo bảng người dùng xác định trường email là duy nhất. Điều này có nghĩa database sẽ trả về lỗi nếu người dùng đăng ký bằng một email đã tồn tại. Để có hành động phù hợp, bạn cần xử lý ngoại lệ Python:
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
while True:
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
# Kiểm tra độ chính xác của mật khẩu
if password1 == password2:
try:
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
else:
print("Your passwords must match.")
Code này dùng khối try-except để xử lý lỗi sẽ xảy ra từ email trùng lặp. Nếu database xuất hiện IntegrityError, vòng lặp while sẽ tiếp tục, nhắc người dùng nhập một địa chỉ email khác.
Bước 6: Chèn dữ liệu người dùng vào database
Giờ bạn đã thu thập và xác minh dữ liệu người dùng, giờ là lúc thêm nó vào database. Bạn có thể dùng một truy vấn SQL để làm việc này. Chính sửa khối try-except như sau:
try:
cursor.execute("""
INSERT INTO users (first_name, last_name, email, password)
VALUES (?, ?, ?, ?)
""", (first_name, last_name, email, password2))
conn.commit()
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
Trong khối try-except đã chỉnh sửa, con trỏ triển khai một hoạt động chèn SQL. Cuối cùng, phương thức conn.commit chuyển giao hoạt động SQL vào database này.
Nếu đã làm theo tất cả bước trên, bạn sẽ có một ứng dụng đăng ký người dùng và lưu chúng vào database. Bạn có thể dùng app như DB Browser for SQLite để xem nội dung của database:
Hi vọng bài viết hữu ích với các bạn!