📜  在 SQLAlchemy 中默认插入 NULL

📅  最后修改于: 2022-05-13 01:54:25.615000             🧑  作者: Mango

在 SQLAlchemy 中默认插入 NULL

在本文中,我们将看到如何在Python的 SQLAlchemy 中将 NULL 作为默认值插入。

可以在定义表(创建表)时使用default参数提供默认值。我们将使用 mySQL 本地数据库作为本文中的示例。随意使用您可能喜欢的任何数据库,但您需要使用您正在处理的数据库类型和凭据修改连接字符串。

示例 1:使用 SQLAlchemy ORM

在上面的示例中,我们在数据库中创建了一个销售表。我们为销售表定义了 3 列,即产品、数量和描述。 product 列是主键,而对于 description 列,我们提供了default=None参数。该参数相当于为传统 SQL 查询中的列提供默认值。当我们第一次插入产品“冰箱”时,我们提供了一个描述(在输出中也可见)。对于第二个条目,即产品“洗衣机”,我们没有提供任何描述参数,因此它采用默认值。提供的默认值是None ,相当于 SQL 中的NULL 。在这个例子中,我们使用了 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 (CONNECTIO 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()


Python
import sqlalchemy as db
  
# CREATE THE METADATA OBJECT
metadata_obj = db.MetaData()
  
# DEFINE THE ENGINE (CONNECTIO 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
        )
    )


输出:

示例 2:使用 SQLAlchemy 核心

在第二个示例中,我们为产品“电视”和“笔记本电脑”插入了两条新记录。如果我们查看代码,为表中的列定义默认值的语法对于 SQLAlchemy Core 和 ORM 是相同的。 “电视”记录带有描述(在输出中也可见)。对于第二个条目,即 'Laptops' ,未提供描述参数,因此默认情况下,它在创建或定义表时采用作为默认参数提供的值。请注意,输出由前两条记录组成,这在 SQLAlchemy ORM 示例中也可以看到。

Python

import sqlalchemy as db
  
# CREATE THE METADATA OBJECT
metadata_obj = db.MetaData()
  
# DEFINE THE ENGINE (CONNECTIO 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
        )
    )

输出: