📜  sqlalchemy 列的默认值 - SQL (1)

📅  最后修改于: 2023-12-03 15:20:17.962000             🧑  作者: Mango

SQLAlchemy列的默认值 - SQL

在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轻松地定义和管理表格。