使用timedelta的where子句中的Python SQL Server时间戳

时间:2019-05-08 02:49:43

标签: python sql sql-server pyodbc

在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'附近的语法不正确---这是日期时间的时间部分。

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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

该错误是由于在比较值中包含了微秒。我可以使用:

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