在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'附近的语法不正确---这是日期时间的时间部分。
我尝试将其包装在''中,但随后从字符串错误中获取转换。
答案 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")