Configuración de la base de datos SQLite con Python Flask

FlaskFlaskBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderemos cómo definir y acceder a una base de datos SQLite utilizando el marco de Python Flask. Configuraremos una base de datos SQLite, estableceremos una conexión con ella, crearemos tablas e inicializaremos la base de datos.

Nota: Debes crear el archivo de código por ti mismo y ejecutarlo en el entorno. Puedes previsualizar el estado del servicio Flask en el Web 5000.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL flask(("Flask")) -.-> flask/CoreConceptsGroup(["Core Concepts"]) flask(("Flask")) -.-> flask/DataHandlingGroup(["Data Handling"]) flask(("Flask")) -.-> flask/DevelopmentToolsGroup(["Development Tools"]) flask/DataHandlingGroup -.-> flask/incoming_request_data("Incoming Request Data") flask/DataHandlingGroup -.-> flask/application_globals("Application Globals") flask/DataHandlingGroup -.-> flask/response_objects("Response Objects") flask/CoreConceptsGroup -.-> flask/application_object("Application Object") flask/CoreConceptsGroup -.-> flask/sessions("Sessions") flask/CoreConceptsGroup -.-> flask/session_interface("Session Interface") flask/CoreConceptsGroup -.-> flask/useful_internals("Useful Internals") flask/DevelopmentToolsGroup -.-> flask/blueprint_objects("Blueprint Objects") flask/DevelopmentToolsGroup -.-> flask/command_line_interface("Command Line Interface") subgraph Lab Skills flask/incoming_request_data -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} flask/application_globals -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} flask/response_objects -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} flask/application_object -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} flask/sessions -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} flask/session_interface -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} flask/useful_internals -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} flask/blueprint_objects -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} flask/command_line_interface -.-> lab-136336{{"Configuración de la base de datos SQLite con Python Flask"}} end

Configuración de la base de datos

En primer lugar, necesitamos configurar una base de datos SQLite para almacenar usuarios y publicaciones. SQLite es una buena opción ya que no requiere un servidor de base de datos separado y está integrado en Python.

En nuestra aplicación Flask, crearemos una conexión a la base de datos SQLite. Esta conexión generalmente está vinculada a la solicitud en aplicaciones web y se cierra una vez que se ha terminado el trabajo.

La conexión se establece utilizando la función sqlite3.connect y utilizamos el objeto especial g de Flask para almacenar y reutilizar la conexión.

Crea un nuevo archivo de Python db.py y agrega el siguiente código:

## flaskr/db.py

import sqlite3
from flask import current_app, g

def get_db():
    ## Verifica si 'db' no está en 'g'
    if 'db' not in g:
        ## Establece una conexión a la base de datos
        g.db = sqlite3.connect(
            current_app.config['DATABASE'],
            detect_types=sqlite3.PARSE_DECLTYPES
        )
        ## Devuelve filas que se comportan como diccionarios
        g.db.row_factory = sqlite3.Row

    return g.db

def close_db(e=None):
    ## Elimina 'db' de 'g' y cierra la conexión si existe
    db = g.pop('db', None)

    if db is not None:
        db.close()

Creación de tablas

En SQLite, los datos se almacenan en tablas y columnas. Necesitamos crear estas antes de poder almacenar y recuperar datos. Nuestra aplicación almacenará usuarios en la tabla user y publicaciones en la tabla post.

Crea un nuevo archivo SQL schema.sql y agrega el siguiente código:

## flaskr/schema.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)
);

Inicialización de la base de datos

A continuación, agregaremos funciones de Python que ejecutarán los comandos SQL para crear las tablas. Agrega las siguientes funciones al archivo db.py:

## flaskr/db.py

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():
    """Clear the existing data and create new tables."""
    init_db()
    click.echo('Initialized the database.')

Registrarse en la aplicación

Las funciones close_db e init_db_command deben registrarse con la instancia de la aplicación para que la aplicación las pueda utilizar. Dado que estamos utilizando una función de fábrica, escribiremos una función que tome una aplicación y realice el registro.

Agrega la siguiente función al archivo db.py:

## flaskr/db.py

def init_app(app):
    app.teardown_appcontext(close_db)
    app.cli.add_command(init_db_command)

Luego, importa y llama a esta función desde la fábrica. Agrega el siguiente código al archivo __init__.py:

## flaskr/__init__.py

def create_app():
    app =...
    ## código existente omitido

    from. import db
    db.init_app(app)

    return app

Inicialización del archivo de base de datos

Ahora que init-db ha sido registrado con la aplicación, se puede llamar utilizando el comando flask.

Ejecuta el comando init-db:

flask --app flaskr init-db
Initialized the database.

Resumen

En este laboratorio, hemos aprendido cómo definir y acceder a una base de datos SQLite utilizando el marco de trabajo Python Flask. Hemos creado una conexión a la base de datos, creado tablas e inicializado la base de datos. Esto es fundamental para cualquier aplicación web que necesita almacenar y recuperar datos de una base de datos.