【问题标题】:Python SQL Server timestamp in where clause using timedeltaPython SQL Server时间戳在where子句中使用timedelta
【发布时间】:2019-05-08 02:49:42
【问题描述】:

在 SQL Server where 子句中使用 datetime.now() 中的 timedelta 时出错

python 3.6

yesterday = datetime.now() - timedelta(days=1)

sql = "SELECT submit_dt, api_job_name, job_status, xml_record_count, x_successful_number, x_failed_number, " \
      f"job_run_time, mf_job_name FROM JOB_LOG where submit_dt > {yesterday}"

try:
    db = Database()
    db.cursor.execute(sql)
    rows = db.cursor.fetchall()

SQL ODBC 错误:“22”附近的语法不正确 --- 这是日期时间的时间部分。

我尝试将其包装在 '' 中,但随后从字符串错误中获取转换。

【问题讨论】:

    标签: python sql sql-server pyodbc


    【解决方案1】:

    考虑参数化您的查询,而不需要日期时间的字符串转换或字符串插值,包括 F 字符串。

    yesterday = datetime.now() - timedelta(days=1)
    
    sql = """SELECT submit_dt, api_job_name, job_status, xml_record_count, 
                    x_successful_number, x_failed_number, 
                    job_run_time, mf_job_name 
             FROM JOB_LOG 
             WHERE submit_dt > ?"""
    
    try:
        db = Database()
        db.cursor.execute(sql, yesterday)
        rows = db.cursor.fetchall()
    

    【讨论】:

      【解决方案2】:

      错误是由于在比较值中包含微秒。我能够使用:

      yesterday_sql = yesterday.strftime("%Y-%m-$d %H:%M:%S")
      

      【讨论】:

        猜你喜欢
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 2015-04-18
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多