【问题标题】:Unable to perform like query with parameter using pyodbc无法使用 pyodbc 执行带参数的类似查询
【发布时间】:2020-02-21 12:52:31
【问题描述】:

我正在尝试在访问查询中将变量作为参数传递,以便在我的网站上生成类似名称的列表。我正在使用 pyodbc 访问我的烧瓶应用程序的 .mdb 数据库。我尝试以多种方式传递变量,例如...

xyz = "SomeName"
cursor.execute('SELECT * FROM Employees WHERE EmployeeName LIKE %?%', xyz)

没用所以我试了一下...

xyz = "SomeName"
cursor.execute('SELECT * FROM Employees WHERE EmployeeName LIKE ?', "%xyz%")

这个很简单。该变量不再是双引号中的变量,因此它将“xyz”作为字符串运行。但是当我将它作为一个字符串传递时,查询就可以工作......

cursor.execute('SELECT * FROM Employees WHERE EmployeeName LIKE ?', "%SomeName%")

如何传递用户输入变量以使该查询工作?提前致谢。

【问题讨论】:

    标签: python sql pyodbc


    【解决方案1】:

    您可以在 ms-access 中使用& 连接字符串:

    xyz = "SomeName"
    cursor.execute('SELECT * FROM Employees WHERE EmployeeName LIKE "%" & ? & "%"', xyz)
    

    或者,您可以在 Python 中连接字符串变量:

    xyz = "SomeName"
    cursor.execute('SELECT * FROM Employees WHERE EmployeeName LIKE ?', '%' + xyz + '%')
    

    【讨论】:

    • Access 驱动程序似乎无法识别“concat()”。我收到错误消息...'pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver] Undefined function 'CONCAT' in expression. (-3102) (SQLExecDirectW)") '跨度>
    • @AshwinKrishnaraj:是的,后来我注意到了ms-access 标签;您可以使用& 运算符代替concat()
    • 我尝试了 'EmployeeName LIKE %&?&%' 并得到“查询表达式 'EmployeeName LIKE %&Pa_RaM000&% 中的语法错误”。我还尝试了 'EmployeeName LIKE "%"&?&"%"' 并得到'参数太少。预计 2 分钟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 2013-05-14
    • 2022-11-03
    相关资源
    最近更新 更多