我将数据传递到数据库以查询数据库但我遇到了以下错误。
>>> my_cursor.execute(my_query, var1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 1 parameters were supplied', 'HY000')
我的代码是
import pyodbc
import pandas as pd
var1 = 'UCSB'
my_connection = pyodbc.connect('DSN=MapR-64-Hive', autocommit=True)
my_cursor = my_connection.cursor()
my_query = """
select * from polaris_datasets.snmaster where parent_pid rlike '%s' and created_date >= "2017-12-01 00:00:00"
"""
my_cursor.execute(my_query, var1)
有谁知道会导致这个问题的原因?
答案 0 :(得分:0)
我从我的代码中发现了这个问题,并且我回答了我自己的问题。 代码应该以这种方式改变,它适用于我。我不确定为什么?在我的情况下没有消耗。
import pyodbc
import pandas as pd
var1 = 'UCSB'
my_connection = pyodbc.connect('DSN=MapR-64-Hive', autocommit=True)
my_cursor = my_connection.cursor()
my_query = """
select * from polaris_datasets.snmaster where parent_pid rlike %s and created_date >= "2017-12-01 00:00:00"
"""
my_cursor.execute(my_query % var1)
答案 1 :(得分:0)
上面提供的解决方案将执行var1
的字符串替换,并在不进行参数化的情况下发出查询-这很糟糕,您可以进行SQL注入。
仅通过替换?
参数标记来尝试此调整,然后查看this answer以获得更多信息:
import pyodbc
import pandas as pd
var1 = 'UCSB'
my_connection = pyodbc.connect('DSN=MapR-64-Hive', autocommit=True)
my_cursor = my_connection.cursor()
my_query = """select * from polaris_datasets.snmaster where parent_pid rlike ? and created_date >= '2017-12-01 00:00:00'"""
my_cursor.execute(my_query, var1)