Python 不支持使用 ODBC 和 Apache Ignite 将字符串映射到 varchar
Python string to varchar mapping using ODBC with Apache Ignite not supported
我的 Ignite 实例 (2.7.5) 已启动并正常工作,我可以使用 DBeaver 连接到它并创建 tables、存储和检索数据等。
我现在正在尝试使用 pyodbc 从 Python 3 (Python 3.6.8) 脚本进行连接。我已经从 ${IGNITE_HOME}/platforms/cpp 目录中提供的源代码编译并安装了 Apache Ignite ODBC 驱动程序。该脚本能够创建一个 table 具有 2 列,一个 int 和一个 varchar,但是当我尝试将字符串值插入 varchar 列时,抛出异常:-
Traceback (most recent call last):
File "/path/Projects/test_ignite/main.py", line 27, in <module>
main()
File "/path/Projects/test_ignite/main.py", line 23, in main
create_table(conn)
File "/path/Projects/test_ignite/main.py", line 16, in create_table
cursor.execute(sql, (row_counter, col_1))
pyodbc.Error: ('HYC00', '[HYC00] Data type is not supported. [typeId=-9] (0) (SQLBindParameter)')
更改第二列的数据类型按预期工作。
示例脚本如下:-
import pyodbc
def create_table(conn):
sql = 'CREATE TABLE IF NOT EXISTS sample (key int, col_1 varchar, PRIMARY KEY(key))'
cursor = conn.cursor()
cursor.execute(sql)
sql = 'insert into sample (key, col_1) values (?, ?)'
num_rows = 10
row_counter = 0
while row_counter < num_rows:
row_counter = row_counter + 1
col_1 = 'Foo'
cursor.execute(sql, (row_counter, col_1)) # Exception thrown here
def main():
conn = pyodbc.connect('DRIVER={Apache Ignite};' +
'SERVER=10.0.1.48;' +
'PORT=10800;')
create_table(conn)
if __name__ == '__main__':
main()
PyODBC 似乎使用 WVARCHAR 类型。 Ignite 的ODBC 好像不支持。我建议使用 jdbc 绑定或 Python 瘦客户端。
我已针对 Apache Ignite JIRA 提出问题:IGNITE-12175
我的 Ignite 实例 (2.7.5) 已启动并正常工作,我可以使用 DBeaver 连接到它并创建 tables、存储和检索数据等。
我现在正在尝试使用 pyodbc 从 Python 3 (Python 3.6.8) 脚本进行连接。我已经从 ${IGNITE_HOME}/platforms/cpp 目录中提供的源代码编译并安装了 Apache Ignite ODBC 驱动程序。该脚本能够创建一个 table 具有 2 列,一个 int 和一个 varchar,但是当我尝试将字符串值插入 varchar 列时,抛出异常:-
Traceback (most recent call last):
File "/path/Projects/test_ignite/main.py", line 27, in <module>
main()
File "/path/Projects/test_ignite/main.py", line 23, in main
create_table(conn)
File "/path/Projects/test_ignite/main.py", line 16, in create_table
cursor.execute(sql, (row_counter, col_1))
pyodbc.Error: ('HYC00', '[HYC00] Data type is not supported. [typeId=-9] (0) (SQLBindParameter)')
更改第二列的数据类型按预期工作。
示例脚本如下:-
import pyodbc
def create_table(conn):
sql = 'CREATE TABLE IF NOT EXISTS sample (key int, col_1 varchar, PRIMARY KEY(key))'
cursor = conn.cursor()
cursor.execute(sql)
sql = 'insert into sample (key, col_1) values (?, ?)'
num_rows = 10
row_counter = 0
while row_counter < num_rows:
row_counter = row_counter + 1
col_1 = 'Foo'
cursor.execute(sql, (row_counter, col_1)) # Exception thrown here
def main():
conn = pyodbc.connect('DRIVER={Apache Ignite};' +
'SERVER=10.0.1.48;' +
'PORT=10800;')
create_table(conn)
if __name__ == '__main__':
main()
PyODBC 似乎使用 WVARCHAR 类型。 Ignite 的ODBC 好像不支持。我建议使用 jdbc 绑定或 Python 瘦客户端。
我已针对 Apache Ignite JIRA 提出问题:IGNITE-12175