📅  最后修改于: 2023-12-03 15:40:53.367000             🧑  作者: Mango
在使用 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 对函数的详细文档: