在 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
)
)
输出: