【问题标题】: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'))"
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      相关资源
      最近更新 更多