📜  用于列默认值的 sqlalchemy 函数 - Python (1)

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

用于列默认值的 SQLAlchemy 函数 - Python

在使用 SQLAlchemy 创建数据库表时,我们很可能需要指定某些列的默认值。SQLAlchemy 提供了一系列函数来处理这个需求,下面将介绍其中一些常用的函数。

sqlalchemy.sql.expression.text()

text() 函数可以接受一个 SQL 字符串作为参数,将其包装为 TextClause 对象,可以用作列的默认值或任何其他 SQL 语句中的参数:

from sqlalchemy import Column, Integer, String, text

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    age = Column(Integer, server_default=text('0'))

上面的例子中我们使用了 text() 函数将字符串 '0' 包装为 TextClause 对象,并将其作为 age 列的默认值。

sqlalchemy.sql.expression.func

func 函数可以用来访问许多数据库系统内置的函数,例如 NOW()DATE()CONCAT() 等等。在使用 func() 函数时需要传入函数名和对应的参数(若有参数的话):

from sqlalchemy import func

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    created_at = Column(DateTime, server_default=func.now())

上面的例子中我们使用了 func.now() 函数将当前的时间设置为 created_at 列的默认值。

sqlalchemy.functions

除了内置函数以外,SQLAlchemy 还提供了各种数据库系统的函数接口。例如,如果需要使用 MySQL 的 LAST_INSERT_ID() 函数作为默认值,则可以使用:

from sqlalchemy import func

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False)
    user_id = Column(Integer, server_default=func.mysql.LAST_INSERT_ID())

上面的例子中我们使用了 func.mysql.LAST_INSERT_ID() 函数将 MySQL 中 LAST_INSERT_ID() 函数包装为 SQLAlchemy 函数,并将其作为 user_id 列的默认值。

在使用这些函数时,需要根据实际需求选择合适的函数,并根据文档正确传递参数。可以参考下面的链接查阅 SQLAlchemy 对函数的详细文档:

SQLAlchemy 函数文档