【问题标题】:Python pyodbc- invalid syntax with SQLPython pyodbc-SQL 语法无效
【发布时间】:2021-12-16 23:45:56
【问题描述】:

我正在使用 Jupyter Notebook。我正在使用 pyodbc 从 SQL Server 2018 获取数据,但是当我尝试执行此操作时,它给了我一个错误。如何解决?

import pyodbc
import datetime
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=DESKTOP-MBJNNJR;'
                      'Database=master;'
                      'Trusted_Connection=yes;')
cursor = conn.cursor()

cursor.execute("SELECT Employee_Name, Hire_Date FROM Employee WHERE Hire_Date BETWEEN [{%s}] AND [{%s}]");
hire_start = datetime.date(1999, 1, 1)
hire_end = datetime.date(1999, 12, 31)
cursor.execute(query, (hire_start, hire_end))
for (Employee_Name, Hire_Date) in cursor:    
    print("{}, {} was hired on {:%d %m %Y}".format(Employee_Name, Hire_Date))
cursor.close()

错误:

ProgrammingError: ('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name '{%s}'. (207) (SQLExecDirectW); [42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name '{%s}'. (207)")

【问题讨论】:

    标签: python sql sql-server pyodbc


    【解决方案1】:

    这看起来像是一个印刷错误,以及参数标记的错误使用。

    推测cursor.execute 的第一行实际上应该是query =...。对于实际的cursor.execute,您无需在进一步的括号中传递参数,PyODBC 中的参数标记是? 而不是%s(表示字符串)。

    query = "SELECT Employee_Name, Hire_Date FROM Employee WHERE Hire_Date BETWEEN ? AND ?;"
    hire_start = datetime.date(1999, 1, 1)
    hire_end = datetime.date(1999, 12, 31)
    cursor.execute(query, hire_start, hire_end)
    

    【讨论】:

    • 当我再次尝试时,它给了我一个错误。错误:('HYC00','[HYC00] [Microsoft][ODBC SQL Server Driver]可选功能未实现(0)(SQLBindParameter)')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多