【问题标题】:How portable (or not) is using SQLLiteral("NOW()") in web.py DB INSERTs?在 web.py DB INSERT 中使用 SQLLiteral("NOW()") 的可移植性(或不可移植性)如何?
【发布时间】:2012-03-19 19:13:12
【问题描述】:

如果我的数据库是 MySQL,我知道这可以正常工作。也许还有其他人。

seq_id = db.insert('mytable', first="Bob",last="Smith",joined=web.SQLLiteral("NOW()"))

嗯,现在,数据库客户会使用 MySQL,但在不久的将来可能不会这样。如果客户决定它必须在 Postgres、Oracle、SQL Server 等上工作,我如何确保我不会头疼?

【问题讨论】:

    标签: mysql sql portability python-2.7 web.py


    【解决方案1】:

    CURRENT_TIMESTAMP is synonymousNOW() 和标准 SQL,因此您不妨优先使用它。

    【讨论】:

    • 不错!带或不带括号的“更标准”是什么?还是两者都一样?
    • @JCCyC - 没有括号。在 SQL Server 中,您没有选择权。使用CURRENT_TIMESTAMP()是错误的
    【解决方案2】:

    它不是。 Now() 在 SQL Server 或 Oracle 中都不起作用。

    在内置函数级别上可能也不值得担心它,因为在此之前您会遇到很多其他问题。

    例如,这仅适用于 MySQL,即使它不使用内置函数

    SELECT a, MAX(b), c
    FROM 
        table
    GROUP BY 
           a
    

    如果您真的很担心,最好确保您的数据访问与其余代码完全分离,并为您关心的每个数据库构建一个新的数据访问层。

    【讨论】:

      猜你喜欢
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多