Insertar NULL como predeterminado en SQLAlchemy

En este artículo, veremos cómo insertar NULL por defecto en SQLAlchemy en Python.

El valor predeterminado se puede proporcionar utilizando el parámetro predeterminado al definir la tabla (crear la tabla). Usaremos la base de datos local mySQL para los ejemplos de este artículo. Siéntase libre de usar cualquier base de datos que desee, pero debe modificar la string de conexión con el tipo de base de datos en la que está trabajando y las credenciales.

Ejemplo 1: uso de SQLAlchemy ORM

En el ejemplo anterior, hemos creado una tabla de ventas en la base de datos. Hemos definido 3 columnas para la tabla de ventas, a saber, producto, cantidad y descripción. La columna de producto es la clave principal, mientras que para la columna de descripción hemos proporcionado un parámetro predeterminado = Ninguno . Este parámetro equivale a proporcionar un valor predeterminado a una columna en las consultas SQL tradicionales. Cuando insertamos por primera vez el producto ‘Refrigerador’, proporcionamos una descripción junto con él (también visible en la salida). Para la segunda entrada, es decir, el producto ‘Lavadora’, no proporcionamos ningún parámetro de descripción, por lo que toma el valor predeterminado. El valor predeterminado proporcionado es Ninguno , que es equivalente a NULL en SQL. En este ejemplo, hemos utilizado SQLAlchemy ORM.

Python

from sqlalchemy.orm import sessionmaker
import sqlalchemy as db
from sqlalchemy.ext.declarative import declarative_base
 
Base = declarative_base()
 
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine(
    "mysql+pymysql://root:password@localhost/Geeks4Geeks")
 
# CREATE THE SALES TABLE MODEL
# TO USE IT FOR QUERYING
class Sales(Base):
 
    __tablename__ = 'sales'
 
    product = db.Column(db.String(50),
                        primary_key=True)
    quantity = db.Column(db.Integer)
    description = db.Column(db.String(100),
                            default=None)
 
 
# CREATE SALES TABLE IF IT
# DOES NOT EXIST ALREADY
Base.metadata.create_all(engine,
                         tables=[Sales.__table__])
 
# CREATE A SESSION OBJECT TO
# COMMIT SQL QUERIES TO DATABASE
Session = sessionmaker(bind=engine)
session = Session()
 
# INSERT NEW RECORD WITH A DESCRIPTION
new_record = Sales(product='Refrigerator',
                   quantity=15,
                   description='The season is too hot!')
session.add(new_record)
session.commit()
 
# INSERT NEW RECORD WITHOUT DESCRIPTION SO
# THAT IT TAKES DEFAULT NULL VALUE AS DEFINED
new_record = Sales(product='Washing Machine',
                   quantity=12)
session.add(new_record)
session.commit()

Producción:

Ejemplo 2: uso de SQLAlchemy Core

En el segundo ejemplo, hemos insertado dos nuevos registros para los productos ‘Televisores’ y ‘Laptops’. Si observamos el código, la sintaxis para definir el valor predeterminado de una columna en una tabla es la misma tanto para SQLAlchemy Core como para ORM. El registro ‘Televisores’ se proporciona con una descripción (visible también en la salida). Para la segunda entrada, es decir, ‘Laptops’, no se proporciona el parámetro de descripción, por lo que, de forma predeterminada, toma el valor proporcionado como parámetro predeterminado al crear o definir la tabla. Tenga en cuenta que la salida consta de los dos registros anteriores que también se ven en el ejemplo ORM de SQLAlchemy.

Python

import sqlalchemy as db
 
# CREATE THE METADATA OBJECT
metadata_obj = db.MetaData()
 
# DEFINE THE ENGINE (CONNECTION OBJECT)
engine = db.create_engine(
    "mysql+pymysql://root:password@localhost/Geeks4Geeks")
 
# CREATE THE SALES TABLE MODEL TO USE IT FOR QUERYING
sales = db.Table(
    'sales',
    metadata_obj,
    db.Column('product', db.String(50),
              primary_key=True),
    db.Column('quantity', db.String(100)),
    db.Column('description', db.Integer,
              default=None),
)
 
# CREATE SALES TABLE IF
# IT DOES NOT EXIST ALREADY
metadata_obj.create_all(engine)
 
# INSERT NEW RECORD WITH A DESCRIPTION
with engine.connect() as conn:
    conn.execute(
        db.insert(sales).values(
            product='Televisions',
            quantity=25,
            description='This value is inserted\
            using SQLAlchemy Core!'
        )
    )
 
# INSERT NEW RECORD WITHOUT DESCRIPTION SO
# THAT IT TAKES DEFAULT NULL VALUE AS DEFINED
with engine.connect() as conn:
    conn.execute(
        db.insert(sales).values(
            product='Laptops',
            quantity=31
        )
    )

Producción:

Publicación traducida automáticamente

Artículo escrito por apathak092 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *