📅  最后修改于: 2023-12-03 15:20:17.962000             🧑  作者: Mango
在SQLAlchemy中,列的默认值用于创建数据库表时指定一个默认值。这意味着,如果插入数据时未提供该列的值,则该列将使用默认值。
SQLAlchemy中默认值可以是静态值或可调用对象。静态值可以是一个固定的值,而可调用对象可以是一个函数或一个lambda表达式。
在创建表时,可以使用default
参数指定列的默认值。例如,我们可以创建一个名为users
的表,并将is_admin
列的默认值设置为False
:
from sqlalchemy import create_engine, Column, Integer, String, Boolean
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine("sqlite:///example.db")
Base = declarative_base()
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
is_admin = Column(Boolean, default=False)
在这个例子中,如果我们插入一个新用户,而没有提供is_admin
的值,它将默认为False
。
除了静态值之外,我们还可以使用可调用对象来指定列的默认值。在这种情况下,每当插入新数据时,该可调用对象将被调用,并将其返回值用作默认值。
以下是一个使用default
参数和可调用对象的例子:
from sqlalchemy import func
class Post(Base):
__tablename__ = "posts"
id = Column(Integer, primary_key=True)
title = Column(String)
body = Column(String)
created_at = Column(DateTime, default=func.now())
在这个例子中,我们使用了SQLAlchemy的func
模块中的now()
函数,该函数返回当前的日期和时间。因此,每当我们插入一个新的Post时,创建时间将被设置为当前时间。
如果要更改现有列的默认值,可以使用server_default
参数。例如,以下代码将更改users
表中的is_admin
列的默认值:
from sqlalchemy import text
alter_query = text("ALTER TABLE users ALTER COLUMN is_admin SET DEFAULT true")
engine.execute(alter_query)
在上面的代码中,我们使用了SQLAlchemy的text
模块中的text()
函数以及SQL的ALTER TABLE
语句来更改is_admin
列的默认值。注意,这个语句实际上是SQLAlchemy所不支持的,但仍然可以通过这种方式来运行原生的SQL查询。
在SQLAlchemy中,我们可以通过default
参数来指定列的默认值。默认值可以是静态值或可调用对象。如果要更改现有列的默认值,则可以使用server_default
参数和SQL语句。
以上是SQLAlchemy列的默认值的介绍,您可以使用SQLAlchemy轻松地定义和管理表格。