Saltar al pie de página
AYUDA DE PYTHON

peewee Python ((Cómo Funciona: Una Guía para Desarrolladores))

Peewee es un ORM pequeño y expresivo que busca facilitar la interacción con la base de datos en Python. Es ligero, fácil de usar, y lo suficientemente confiado como para soportar consultas complejas o esquemas de base de datos. Peewee soporta SQLite, MySQL y PostgreSQL con una sintaxis intuitiva, lo que lo hace muy fácil de aprender, convirtiéndose en muy popular entre estudiantes y profesionales.

IronPDF es una biblioteca de Python que permite trabajar completa y de principio a fin con documentos PDF: crear, leer, editar y gestionar. Usando Python .NET, se puede usar IronPDF con aplicaciones Python, derivando así capacidades muy fuertes de generación de PDF. Esta combinación es, por lo tanto, muy útil en la generación de reportes PDF basados en datos recuperados de bases de datos.

Esta integración combina Peewee con IronPDF para la creación de aplicaciones por desarrolladores Python de manera que sea posible la gestión eficiente de la base de datos y consultas junto con la generación de documentos PDF dinámicos y basados en datos. Esta combinación prepara un flujo de trabajo perfecto desde la recuperación de datos hasta la generación de informes y por ello ofrece un conjunto de herramientas muy potentes para crear documentación profesional y automatizada. Comenzando con reportes de negocios simples como facturas y pasando a reportes complejos, Peewee y IronPDF juntos ofrecen una solución impecable para la generación de PDF basada en la base de datos en cualquier aplicación de Python.

¿Qué es PeeWee Python?

Peewee es un pequeño y expresivo ORM para Python para facilitar el trabajo con una base de datos. Crea modelos fácilmente y facilita la creación de consultas comunes como buscar, agregar, actualizar y eliminar varios registros en la base de datos. Peewee podría usarse en muchos casos de uso diferentes, la razón es que soporta diferentes backend: SQLite, MySQL y PostgreSQL.

Algo para gustar de Peewee es su simplicidad y facilidad. Es muy fácil para un desarrollador crear modelos como clases en Python, mientras que todas las consultas contra la base de datos se hacen como código Python gracias a una API sencilla. A pesar de esta simplicidad, Peewee es súper poderoso ya que tiene soporte para preguntas complicadas, uniones y relaciones complejas, y soporta agrupamiento de conexiones.

peewee Python ((How It Works: A Guide for Developers)): Figure 1 - Peewee

La flexibilidad y el diseño minimalista hacen que Peewee sea bastante útil para proyectos pequeños y aplicaciones más grandes donde el uso fácil y el desarrollo rápido son primordiales. Manejar interacciones complejas con bases de datos con muy poco código boilerplate lo ha convertido en un atractivo ORM para cualquier desarrollador de Python.

Características de Peewee Python

Peewee es una biblioteca ORM ligera y expresiva para Python para interactuar con la base de datos fácilmente. A continuación se enumeran varias de sus características importantes:

  • Fácil y Simple: Peewee tiene una API muy fácil e intuitiva para exponer. Los desarrolladores pueden definir modelos con todos sus atributos normales sin ningún problema al utilizarlo e interactuar con la base de datos usando fácilmente código Python.

  • Múltiples Bases de Datos: Soporta SQLite, MySQL, PostgreSQL y CockroachDB.

  • Sintaxis de Consultas Expresiva: Peewee tiene una sintaxis limpia y expresiva para consultar bases de datos; podemos usar las mismas operaciones de consulta como Seleccionar, Crear, Actualizar y una consulta de eliminación permitiendo a los desarrolladores escribir consultas difíciles usando constructos Pythónicos.

  • Definición de Modelo: Uno define modelos de base de datos como clases Python en Peewee. Los campos en la clase coinciden con las columnas de la base de datos. Esta definición asegura que si uno realiza cualquier tipo de cambio en el esquema de la base de datos, se realicen cambios equivalentes en el código de Python, y viceversa.

  • Relaciones: Soporta todas las relaciones, incluidas las claves foráneas, relaciones uno a uno y muchas a muchas, necesarias para modelar datos complejos.

  • Agrupación de Conexiones: Peewee viene con agrupación de conexiones incorporada para mejorar el rendimiento reutilizando conexiones de base de datos.

  • Transacciones: Las transacciones atómicas aseguran que se ejecute un conjunto de operaciones de base de datos, pero si alguna de ellas falla, todas se revierten para mantener la validez de sus datos.

  • Señales y Ganchos: Peewee brinda señales y ganchos para implementar comportamiento personalizado antes o después de algunos eventos, como guardar o eliminar un registro.

  • Migraciones: Además, esto integra librerías de terceros con la principal, Peewee-migrate, y así gestiona las migraciones del esquema de base de datos. Esto ayudará en la transición suave de versiones de una base de datos.

  • Extensibilidad: Peewee puede extenderse fácilmente mediante campos personalizados, consultas u otras características según las necesidades concretas de la aplicación.

  • Extensiones Playhouse: Este módulo viene con una variedad de extensiones para el playhouse, que incluye búsqueda de texto completo para SQLite, algunas funciones específicas de PostgreSQL y algunas herramientas para gestionar conexiones.

  • Soporte Asíncrono: aiopeewee es una extensión que hace que Peewee soporte operaciones asíncronas adecuadas para Aplicaciones de Alto Rendimiento.

Crear y configurar Peewee

Los siguientes pasos le ayudarán a empezar con Peewee en cualquier proyecto de Python, configurando una aplicación simple usando Peewee ORM.

Instalar Peewee

Primero, instale Peewee usando pip:

pip install peewee
pip install peewee
SHELL

Defina sus modelos

Asegúrese de definir sus modelos de base de datos en un archivo de Python llamado app.py. Aquí, haremos lo mismo por simplicidad, usando SQLite.

from peewee import SqliteDatabase, Model, CharField, IntegerField, ForeignKeyField

# Define the database connection
db = SqliteDatabase('my_database.db')

# Define a base model class
class BaseModel(Model):
    class Meta:
        database = db

# Define a User model
class User(BaseModel):
    username = CharField(unique=True)
    age = IntegerField()

# Define a Tweet model, which is related to the User model
class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')
    content = CharField()

# Create the tables
db.connect()
db.create_tables([User, Tweet])
from peewee import SqliteDatabase, Model, CharField, IntegerField, ForeignKeyField

# Define the database connection
db = SqliteDatabase('my_database.db')

# Define a base model class
class BaseModel(Model):
    class Meta:
        database = db

# Define a User model
class User(BaseModel):
    username = CharField(unique=True)
    age = IntegerField()

# Define a Tweet model, which is related to the User model
class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')
    content = CharField()

# Create the tables
db.connect()
db.create_tables([User, Tweet])
PYTHON

Insertar datos

Ahora añadamos algunos datos a nuestra base de datos.

def insert_data():
    # Insert a new user
    alice = User.create(username='Alice', age=30)
    # Insert some tweets for Alice
    Tweet.create(user=alice, content='Hello world!')
    Tweet.create(user=alice, content='I love Peewee!')
    # Insert another user and a tweet for that user
    bob = User.create(username='Bob', age=25)
    Tweet.create(user=bob, content='This is Bob')

insert_data()
def insert_data():
    # Insert a new user
    alice = User.create(username='Alice', age=30)
    # Insert some tweets for Alice
    Tweet.create(user=alice, content='Hello world!')
    Tweet.create(user=alice, content='I love Peewee!')
    # Insert another user and a tweet for that user
    bob = User.create(username='Bob', age=25)
    Tweet.create(user=bob, content='This is Bob')

insert_data()
PYTHON

Datos de consulta

Ahora, construyamos algún código para extraer toda esta información de nuestra base de datos.

def query_data():
    # Query to select all users and print their usernames and ages
    for user in User.select():
        print(f'User: {user.username}, Age: {user.age}')

    # Find tweets for a specific user, in this case, 'Alice'
    for tweet in Tweet.select().join(User).where(User.username == 'Alice'):
        print(f'{tweet.user.username} tweeted: {tweet.content}')

query_data()
def query_data():
    # Query to select all users and print their usernames and ages
    for user in User.select():
        print(f'User: {user.username}, Age: {user.age}')

    # Find tweets for a specific user, in this case, 'Alice'
    for tweet in Tweet.select().join(User).where(User.username == 'Alice'):
        print(f'{tweet.user.username} tweeted: {tweet.content}')

query_data()
PYTHON

A continuación se muestra la captura de pantalla combinada de todos los códigos.

peewee Python ((How It Works: A Guide for Developers)): Figure 2 - Query Data Output

Para empezar

Primero, necesitará importar Peewee para características asociadas con el Mapeo de Objetos Relacionales, y IronPDF para la generación de PDFs. Este tutorial asume que ya tiene conocimientos de Python y cómo configurar tanto IronPDF para trabajar en Python a través de Python .NET como Peewee. Los siguientes pasos lo guiarán a través de cómo crear una aplicación simple usando Peewee para interactuar con una base de datos, y IronPDF se usará para generar un reporte en PDF.

¿Qué es IronPDF?

El módulo de Python IronPDF es una biblioteca avanzada para crear, editar y leer PDFs. Proporciona una gran cantidad de funcionalidades para que los programadores puedan realizar muchas actividades programables con PDFs. Esto incluye convertir archivos HTML en archivos PDF para editar PDFs existentes. Eso lo hará más flexible y más fácil de generar excelentes reportes en formato PDF. Los programas que generan y procesan PDFs dinámicamente pueden aprovechar esto.

peewee Python ((How It Works: A Guide for Developers)): Figure 3 - IronPDF

Conversión de HTML a PDF

Cualquier dato HTML, fechado en cualquier momento, podría fácilmente ser convertido en un documento PDF con las capacidades de IronPDF. Además, proporciona una plataforma al usuario para crear publicaciones PDF extremadamente innovadoras y llamativas directamente a partir de material en línea mientras utiliza todas las capacidades más recientes de HTML5, CSS3 y JavaScript.

Generar y editar PDF

Podría generar nuevos documentos PDF con texto, imágenes, tablas, etc., incluso con la ayuda de un lenguaje de programación. Se le permite abrir documentos preparados de antemano y editarlos usando IronPDF, añadiendo más personalización. Se pueden añadir, cambiar o eliminar en cualquier momento los contenidos de un documento PDF.

Diseño y estilo complejos

Dado que tiene un estilo de contenido para PDFs inherentemente, los diseños complejos pueden controlarse con varias fuentes, colores y otros elementos de diseño que hacen esto posible. Además, no se puede aplicar JavaScript para manejar material dinámico en PDFs para habilitar una fácil representación de contenido HTML.

Instalar IronPDF

IronPDF se puede instalar usando Pip. El comando de instalación será como se muestra a continuación:

pip install ironpdf
pip install ironpdf
SHELL

Combine Peewee con IronPDF

El ORM Peewee puede ser creado y configurado, se pueden insertar datos, y se pueden producir reportes PDF combinando todas las etapas en el archivo app.py.

from peewee import SqliteDatabase, Model, CharField, IntegerField, ForeignKeyField
import os
from ironpdf import *   # Import IronPDF for PDF generation
import warnings  # Suppress any warning messages for clean output

warnings.filterwarnings('ignore')

# You must specify your license key if IronPDF requires it; use an empty string for trial
License.LicenseKey = ""

# Define the database connection using SQLite
db = SqliteDatabase('my_database.db')

# BaseModel class that will define common configurations for all models
class BaseModel(Model):
    class Meta:
        database = db

# Define a User model to interact with the 'User' table in the database
class User(BaseModel):
    username = CharField(unique=True)  # Ensure username is unique
    age = IntegerField()

# Define a Tweet model for the 'Tweet' table that references User
class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')  # Define relationship with User
    content = CharField()

# Connect to the database and create the necessary tables if they don't exist
db.connect()
db.create_tables([User, Tweet])

def insert_data():
    # Insert some sample data into the User and Tweet models
    alice = User.create(username='Alice', age=30)
    Tweet.create(user=alice, content='Hello world!')
    Tweet.create(user=alice, content='I love Peewee!')
    bob = User.create(username='Bob', age=25)
    Tweet.create(user=bob, content='This is Bob')

def generate_pdf():
    # Fetch the data from the database
    users = User.select()
    tweets = Tweet.select().join(User)

    # Prepare HTML content for the PDF generation
    html_content = """
    <html>
    <head><title>Data Report</title></head>
    <body>
        <h1>User Data Report</h1>
        <h2>Users</h2>
        <ul>
    """
    for user in users:
        html_content += f"<li>{user.username}, Age: {user.age}</li>"
    html_content += "</ul><h2>Tweets</h2><ul>"
    for tweet in tweets:
        html_content += f"<li>{tweet.user.username} tweeted: {tweet.content}</li>"
    html_content += "</ul></body></html>"

    # Create a PDF document using IronPDF
    renderer = ChromePdfRenderer()
    pdf = renderer.RenderHtmlAsPdf(html_content)

    # Save the PDF file to the current working directory
    output_path = os.path.join(os.getcwd(), "Data_Report.pdf")
    pdf.SaveAs(output_path)
    print(f"PDF Report saved to {output_path}")

if __name__ == '__main__':
    insert_data()       # Insert data into the database
    generate_pdf()      # Generate a PDF report based on the data
from peewee import SqliteDatabase, Model, CharField, IntegerField, ForeignKeyField
import os
from ironpdf import *   # Import IronPDF for PDF generation
import warnings  # Suppress any warning messages for clean output

warnings.filterwarnings('ignore')

# You must specify your license key if IronPDF requires it; use an empty string for trial
License.LicenseKey = ""

# Define the database connection using SQLite
db = SqliteDatabase('my_database.db')

# BaseModel class that will define common configurations for all models
class BaseModel(Model):
    class Meta:
        database = db

# Define a User model to interact with the 'User' table in the database
class User(BaseModel):
    username = CharField(unique=True)  # Ensure username is unique
    age = IntegerField()

# Define a Tweet model for the 'Tweet' table that references User
class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')  # Define relationship with User
    content = CharField()

# Connect to the database and create the necessary tables if they don't exist
db.connect()
db.create_tables([User, Tweet])

def insert_data():
    # Insert some sample data into the User and Tweet models
    alice = User.create(username='Alice', age=30)
    Tweet.create(user=alice, content='Hello world!')
    Tweet.create(user=alice, content='I love Peewee!')
    bob = User.create(username='Bob', age=25)
    Tweet.create(user=bob, content='This is Bob')

def generate_pdf():
    # Fetch the data from the database
    users = User.select()
    tweets = Tweet.select().join(User)

    # Prepare HTML content for the PDF generation
    html_content = """
    <html>
    <head><title>Data Report</title></head>
    <body>
        <h1>User Data Report</h1>
        <h2>Users</h2>
        <ul>
    """
    for user in users:
        html_content += f"<li>{user.username}, Age: {user.age}</li>"
    html_content += "</ul><h2>Tweets</h2><ul>"
    for tweet in tweets:
        html_content += f"<li>{tweet.user.username} tweeted: {tweet.content}</li>"
    html_content += "</ul></body></html>"

    # Create a PDF document using IronPDF
    renderer = ChromePdfRenderer()
    pdf = renderer.RenderHtmlAsPdf(html_content)

    # Save the PDF file to the current working directory
    output_path = os.path.join(os.getcwd(), "Data_Report.pdf")
    pdf.SaveAs(output_path)
    print(f"PDF Report saved to {output_path}")

if __name__ == '__main__':
    insert_data()       # Insert data into the database
    generate_pdf()      # Generate a PDF report based on the data
PYTHON

Este código muestra cómo usar Python .NET para combinar IronPDF, una biblioteca de Python para la creación de PDF, con Peewee, un ORM ligero para Python. Usando Peewee, primero crea una base de datos SQLite y define los modelos User y Tweet con los campos apropiados. Después de crear las tablas de la base de datos, se les añade datos de muestra. Luego, usando la clase ChromePdfRenderer de IronPDF, la función generate_pdf recupera estos datos y los transforma en una cadena HTML que luego se renderiza como PDF.

peewee Python ((How It Works: A Guide for Developers)): Figure 4 - Console Output

El directorio de trabajo actual es donde se almacena el PDF. Usando las ventajas de Peewee para la administración de bases de datos y IronPDF para producir documentos PDF pulidos, esta configuración permite interacciones fluidas con bases de datos y salida automática de informes PDF dentro de una aplicación Python.

peewee Python ((How It Works: A Guide for Developers)): Figure 5 - PDF Output

Conclusión

Esto proporcionará una opción confiable para los desarrolladores de Python que buscan administrar bases de datos y generar documentos PDF dinámicos una vez que IronPDF se integre en Peewee. Con las funciones ORM fáciles de usar, las interacciones con la base de datos se facilitan en Peewee, permitiendo que un desarrollador construya y cambie esquemas de base de datos con mucha facilidad. Por otro lado, IronPDF tiene un paquete que facilita traducir contenido HTML en informes PDF de calidad.

Esta combinación será, por tanto, muy útil en aplicaciones que generan reportes automáticos usando datos dinámicos recuperados de bases de datos. Los desarrolladores pueden aprovechar lo fácil que es definir modelos y ejecutar consultas con Peewee, y cómo IronPDF crea poderosamente PDFs, para mejorar efectivamente la eficiencia y productividad. Peewee e IronPDF, como combinación, se convierten en herramientas flexibles y fuertes para atender una gran variedad de necesidades de aplicaciones de muchas maneras dentro del universo del desarrollo en Python. Estos pueden ir desde facturas hasta informes sobre documentos especiales.

Combinar IronPDF con otros productos de Iron Software ayudará a ofrecer soluciones de software superiores a clientes que ofrecen soluciones complejas a los usuarios. Esto, para su bien, simplificará la tarea de mejorar las operaciones de proyectos y procedimientos en general.

Además de las características principales, hay documentación detallada, una comunidad activa y un ciclo de actualizaciones regular para IronPDF. Basado en la información anterior de los párrafos anteriores, un desarrollador puede considerar que Iron Software es un socio confiable para proyectos de desarrollo de software modernos. Para conocer todas las características de esta biblioteca, IronPDF ofrece una prueba gratuita para un desarrollador. En los días siguientes, se asegurará de obtener el valor total de su $799 gastado en la tarifa de la licencia.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más