Временная метка Python SQL Server в предложении where с использованием timedelta - PullRequest
0 голосов
/ 08 мая 2019

Ошибка при использовании timedelta из datetime.now () в SQL Server, где предложение

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()

Ошибка ODBC SQL: неверный синтаксис около '22' -- это часть времени datetime.

Я пытался обернуть его в '', но затем получил преобразование из строковой ошибки.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Рассмотрите возможность параметризации вашего запроса без необходимости преобразования строки даты-времени или интерполяции строки, включая 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()
0 голосов
/ 08 мая 2019

Ошибка произошла из-за включения микросекунд в значение сравнения.Я смог использовать:

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