0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Hướng dẫn Kết nối Cơ sở dữ liệu SQLite với Flask: Thao tác và Quản lý Dữ liệu

Đăng vào 1 tháng trước

• 3 phút đọc

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 Copy
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ình DATABASE, 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 Copy
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 Copy
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ở file schema.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ệnh init-db cho phép bạn gọi hàm init_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_dbinit_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 Copy
def init_app(app):
    app.teardown_appcontext(close_db)
    app.cli.add_command(init_db_command)

source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào