ProgrammingErrorL(SQL包含0个参数标记,但提供了1个参数,' HY000')

时间:2018-01-11 02:06:33

标签: python hive odbc

我将数据传递到数据库以查询数据库但我遇到了以下错误。

 >>> 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)

有谁知道会导致这个问题的原因?

2 个答案:

答案 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)