【问题标题】:Python string to varchar mapping using ODBC with Apache Ignite not supported不支持使用 ODBC 和 Apache Ignite 的 Python 字符串到 varchar 映射
【发布时间】:2019-09-17 20:04:57
【问题描述】:

我的 Ignite 实例 (2.7.5) 已启动并正常工作,我可以使用 DBeaver 连接到它并创建表、存储和检索数据等。

我现在正在尝试使用 pyodbc 从 Python 3 (Python 3.6.8) 脚本进行连接。我已经从 ${IGNITE_HOME}/platforms/cpp 目录中提供的源代码编译并安装了 Apache Ignite ODBC 驱动程序。该脚本能够创建一个包含 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()

【问题讨论】:

    标签: python-3.x ignite


    【解决方案1】:

    PyODBC 似乎使用 WVARCHAR 类型。 Ignite 的 ODBC 似乎不支持它。我建议使用 jdbc 绑定或 Python 瘦客户端。

    我已针对 Apache Ignite JIRA 提出问题:IGNITE-12175

    【讨论】:

    • 谢谢。如何观看 JIRA,是否需要登录 IGNITE JIRA?
    • 是的,如果您愿意,可以观看该问题。
    猜你喜欢
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 2010-12-13
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多