Hướng dẫn Kết nối Cơ sở dữ liệu SQLite với Flask
Chỉ định và Truy cập Cơ sở Dữ liệu
Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng cơ sở dữ liệu SQLite trong ứng dụng Flask để lưu trữ thông tin về người dùng (users
) và bài viết (posts
). SQLite là một lựa chọn tuyệt vời vì nó không yêu cầu cài đặt máy chủ cơ sở dữ liệu riêng biệt và đã được tích hợp sẵn trong Python thông qua module sqlite3
.
SQLite rất tiện lợi cho các dự án nhỏ, nhưng nếu ứng dụng của bạn phát triển và yêu cầu nhiều truy vấn đồng thời, hiệu suất có thể bị ảnh hưởng, vì các truy vấn sẽ được xử lý tuần tự. Do đó, bạn nên cân nhắc chuyển sang các hệ quản trị cơ sở dữ liệu khác khi dự án mở rộng.
Trong hướng dẫn này, chúng ta sẽ không đi sâu vào SQL, nhưng nếu bạn muốn tìm hiểu thêm về ngôn ngữ này, hãy tham khảo tài liệu chính thức của SQLite.
Kết Nối đến Cơ Sở Dữ Liệu
Khi làm việc với cơ sở dữ liệu SQLite (và các thư viện cơ sở dữ liệu Python khác), bước đầu tiên là tạo một kết nối đến cơ sở dữ liệu. Mọi truy vấn và thao tác sẽ được thực hiện thông qua kết nối này, và nó sẽ được đóng khi công việc kết thúc. Trong ứng dụng web, kết nối này thường gắn với mỗi yêu cầu của người dùng.
Mã Nguồn: Tạo Kết Nối Cơ Sở Dữ Liệu
python
import sqlite3
import click
from flask import current_app, g
def get_db():
if 'db' not in g:
g.db = sqlite3.connect(
current_app.config['DATABASE'],
detect_types=sqlite3.PARSE_DECLTYPES
)
g.db.row_factory = sqlite3.Row
return g.db
def close_db(e=None):
db = g.pop('db', None)
if db is not None:
db.close()
- Đối tượng
g
là một khung làm việc đặc biệt được Flask cung cấp cho mỗi yêu cầu, cho phép bạn lưu trữ và chia sẻ dữ liệu giữa các func. current_app
trỏ đến ứng dụng Flask đang xử lý, giúp bạn lấy cấu hình dễ dàng.sqlite3.connect()
kết nối đến file cơ sở dữ liệu được chỉ định trong khóa cấu hìnhDATABASE
, file này sẽ được tạo ra khi bạn khởi tạo cơ sở dữ liệu.sqlite3.Row
cho phép các hàng dữ liệu được truy cập như một dictionary, giúp truy xuất thông tin theo tên cột dễ dàng hơn.- Hàm
close_db()
đóng kết nối cơ sở dữ liệu nếu nó đã được mở.
Tạo Bảng Dữ Liệu
Trong SQLite, dữ liệu được lưu trữ trong các bảng (tables
) và cột (columns
). Trước khi lưu trữ và truy xuất dữ liệu, bạn cần tạo các bảng thích hợp.
Mã Nguồn: Tạo Bảng trong Cơ Sở Dữ Liệu
sql
DROP TABLE IF EXISTS user;
DROP TABLE IF EXISTS post;
CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL
);
CREATE TABLE post (
id INTEGER PRIMARY KEY AUTOINCREMENT,
author_id INTEGER NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
title TEXT NOT NULL,
body TEXT NOT NULL,
FOREIGN KEY (author_id) REFERENCES user (id)
);
Để thực hiện các lệnh SQL này, hãy thêm một số hàm vào file db.py
như sau:
Mã Nguồn: Khởi Tạo Cơ Sở Dữ Liệu
python
def init_db():
db = get_db()
with current_app.open_resource('schema.sql') as f:
db.executescript(f.read().decode('utf8'))
@click.command('init-db')
def init_db_command():
"""Xóa dữ liệu hiện có và tạo các bảng mới."""
init_db()
click.echo('Đã khởi tạo cơ sở dữ liệu.')
open_resource()
giúp bạn mở fileschema.sql
mà không cần biết vị trí chính xác, rất hữu ích trong các dự án lớn.click.command()
tạo một lệnh dòng lệnhinit-db
cho phép bạn gọi hàminit_db
từ command line.
Đăng Ký Hàm với Ứng Dụng
Cuối cùng, bạn cần đăng ký các hàm close_db
và init_db_command
với ứng dụng Flask của mình để chúng có thể được sử dụng.
Mã Nguồn: Đăng Ký Hàm
python
def init_app(app):
app.teardown_appcontext(close_db)
app.cli.add_command(init_db_command)
source: viblo