【问题标题】:Can a column's server_defaults be different for different dialects in SQLAlchemy?SQLAlchemy中不同方言的server_default列可以不同吗?
【发布时间】:2016-10-08 17:59:05
【问题描述】:
我正在使用 SQLAlchemy 配置我的数据库模式,并且我想设置一个 Column 和一个 server_default,这取决于数据库方言。一个数据库函数调用 PostgreSQL,另一个调用 SQLite。这可以做到吗?怎么样?
from sqlalchemy import Column, DateTime
class CustomNow():
pass # What to do?
class Timestamps(object):
created = Column(DateTime, server_default=CustomNow())
【问题讨论】:
标签:
python
postgresql
sqlite
sqlalchemy
【解决方案1】:
使用@compiles 装饰器,如the docs 中所述:
from sqlalchemy.ext.compiler import compiles
from sqlalchemy.sql.functions import FunctionElement
class CustomNow(FunctionElement):
name = "custom_now"
@compiles(CustomNow)
def visit_custom_now(element, compiler, **kwargs):
return "(NOW())"
@compiles(CustomNow, "sqlite")
def visit_custom_now_for_sqlite(element, compiler, **kwargs):
return "(DATETIME('now', 'localtime'))"