【问题标题】:How to pass datetime in SQL Server query using Python如何使用 Python 在 SQL Server 查询中传递日期时间
【发布时间】:2021-08-22 21:14:33
【问题描述】:

我在这里相对较新,非常感谢您的帮助。

我想在 Python 中运行这个 SQL 查询:

SELECT datepoint, type_prix_id, prix
FROM XXXXXX
WHERE datepoint BETWEEN '22/07/2020 00:10:00' AND '23/07/2020'  
  AND type_prix_id = 25

所以我写了这个,但日期有问题:

#test appel DB

import pyodbc 
import pandas as pd
import datetime
import time as tt

connexion = pyodbc.connect('Driver={SQL Server};'
                      'Server=XXXXX;'
                      'Database=XXXXX;'
                      'UID=XXXXX;'
                      'PWD=XXXXXX')


cursor = connexion.cursor()

cursor.execute('SELECT * FROM database.dbo.table WHERE datepoint BETWEEN '22/07/2020 00:10:00' AND '23/07/2020' ')
for row in cursor:
    print(row)

当我删除日期参数时,此代码有效,但它总是失败。我对此进行了研究,发现我必须为日期传递一个参数,但我不知道该怎么做。

非常感谢你们的帮助。

祝你有美好的一天!

【问题讨论】:

  • 试试cursor.execute("SELECT * FROM database.dbo.table WHERE datepoint between '2020-07-22 00:10:00' and '2020-07-23'")
  • 嗨,戈德,感谢您的回答。但它不起作用,因为它向我提出了一个错误,即他无法在日期时间转换 varchar 值
  • 我不知道,this code 适合我。

标签: python sql sql-server datetime pyodbc


【解决方案1】:

您可以通过使用参数和 ? 占位符(例如

)来使用准备好的查询语句
cursor.execute("SELECT * FROM database.dbo.table WHERE [datepoint] BETWEEN ? AND ? ",
               '2020-07-22 00:10:00','2020-07-23')

为了有一个清晰且安全的 SQL Select 语句以防止 SQL 注入

P.S. 在单引号中使用不带转义符的单引号是违规行为。所以 , 会报错。

【讨论】:

  • 您好,Barbaros,非常感谢您的回答。我已经尝试过了,但它引发了一个新错误:pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC SQL Server Driver]Optional functionnality non-implemented(0) (SQLBindParameter)')
  • 嗨@Lehax 摆脱datetime.date 然后仅使用当前文字重试。
  • 我又报错了,说不能在datetime中转换varchar。我想这是因为我的数据库是这样的 2020-07-22 00:30:00.000,所以我必须设置小时也没有?
  • cursor = connexion.cursor() cursor.execute(""" SELECT datepoint, type_prix_id, prix FROM database.dbo.table WHERE datepoint BETWEEN ? AND ? """,'2020-07-22 00:10:00','2020-07-23 00:10:00') 光标所在行:print(row)
【解决方案2】:

我的问题解决了:

date_timedeb_str = '2020-07-26 00:10:00'
date_time_obj1 = datetime.datetime.strptime(date_timedeb_str, '%Y-%m-%d %H:%M:%S')

date_timefin_str = '2020-07-29 00:10:00'
date_time_obj2 = datetime.datetime.strptime(date_timefin_str, '%Y-%m-%d %H:%M:%S')

cursor.execute("""
               SELECT datepoint, type_prix_id, prix FROM database.dbo.table  WHERE datepoint BETWEEN ? AND ? AND type_prix_id = ?
               """,(date_time_obj1),(date_time_obj2),(25))
for row in cursor:
    print(row)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多