2015-11-13 2 views
0

Я установил DataStax Community Edition и добавил соединитель ODBC DataStax. Теперь я пытаюсь получить доступ к базе данных с помощью pyodbc:Cassandra ODBC привязка параметра

import pyodbc 
connection = pyodbc.connect('Driver=DataStax Cassandra ODBC Driver;Host=127.0.0.1', 
          autocommit = True) 
cursor = connection.cursor() 
cursor.execute('CREATE TABLE Test (id INT PRIMARY KEY)') 
cursor.execute('INSERT INTO Test (id) VALUES (1)') 
for row in cursor.execute('SELECT * FROM Test'): 
    print row 

Он отлично работает и возвращает

>>> (1,) 

Однако, когда я пытаюсь

cursor.execute('INSERT INTO Test (id) VALUES (:id)', {'id': 2}) 

я

>>> Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "test.py", line 11, in <module> 
    cursor.execute('INSERT INTO Test (id) VALUES (:id)', {'id': 2}) 
pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 1 parameters were supplied', 'HY000') 

Альтернативы не работают:

cursor.execute('INSERT INTO Test (id) VALUES (:1)', (2)) 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "test.py", line 11, in <module> 
    cursor.execute('INSERT INTO Test (id) VALUES (?)', (2)) 
pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 1 parameters were supplied', 'HY000') 

и

cursor.execute('INSERT INTO Test (id) VALUES (?)', (2)) 

>>> Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
pyodbc.Error: ('HY000', "[HY000] [DataStax][CassandraODBC] (15) Error while preparing a query in Cassandra: [33562624] : line 1:31 no viable alternative at input '1' (...Test (id) VALUES (:[1]...) (15) (SQLPrepare)") 

Моя Cassandra версия 2.2.3, драйвер ODBC от https://downloads.datastax.com/odbc-cql/1.0.1.1002/

+0

каких-либо причины для использования ODBC и pyodbc вместо родного драйвера? –

+0

На самом деле я хочу получить доступ к Cassandra из Delphi, и ODBC - это почти единственный вариант для меня. Я использовал скрипт Python, чтобы все люди могли понять код. –

ответ

0

Согласно pyodbc документации ваш запрос должен быть

cursor.execute('INSERT INTO Test (id) VALUES (?)', 2) 

Более подробную информацию о pyodbc Insert

Согласно комментарию есть поток, который говорит, что это открытая ошибка в pyodbc BUG

+0

Результат будет таким же, к сожалению: pyodbc.ProgrammingError: ('SQL содержит 0 параметров маркеров, но 1 параметр был предоставлен', 'HY000') –

+0

Хмм, код не работает с pypyodbc: pypyodbc.ProgrammingError : ('HY000', 'SQL содержит 0 маркеров параметров, но 1 параметр был поставлен'). Существуют ли альтернативы для тестирования ODBC Cassandra? –