gpt4 book ai didi

python - 如何让 Python 和 Informix 在 Linux 上对话?

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:19 24 4
gpt4 key购买 nike

我从事这个工作已经有一段时间了,尝试了来自 openSource、IBM 和许多其他公司的各种不同的软件包。我还没有找到一个可以在没有某种令人困惑的安装方法的情况下工作的方法,我无法工作,或者与其他第三方组件进行某种集成,我似乎无法工作。

我只是尝试使用 Python 在 Informix 服务器上执行 SQL 语句。与 mySQL 和其他工具没有什么不同。使用游标或完整结果转储,真的不在乎。我希望能够静态或动态地形式化查询字符串,然后告诉任何工具/模块执行所述查询并返回结果(如果有)。

我已经尝试过:

我已经做到了:

  • 我已经能够安装 IBM Informix Client SDK 并使其正常工作。我可以连接到我的 Informix DB 服务器并执行查询。
  • 我的 mySQL 正在工作、连接和查询。
  • 我编写了一个 Java 程序来使用 Java 驱动程序执行查询,对其进行编译,并将其与 bash 脚本结合起来以执行查询并通过电子邮件发送结果。

我只是被难住了。寻求有关下载内容(URL)、如何安装(提示和技巧、环境变量、安装位置等)的帮助。我想要一些不依赖于 Java 或编写 Java 等的东西我正在寻找一种解决方案,使我能够编写 Python 来查询、插入、更新和删除 Informix 数据库和表。我想将之前编写的 Java 和 Bash 脚本合并到 Python 脚本中。

感到沮丧并寻求任何帮助。

感谢您的聆听,如果您不明白我的请求,请提问。

最佳答案

Linux 上的 Informix 令人头疼。我个人为使 Informix-connect 与 CPython3 配合使用而进行的设置是将 Informix Client SDK 与 unixODBC 和 pyodbc 堆叠起来。有一些困难需要克服,但没有一个被记录下来。几乎所有设置都是完全无用的,但需要防止 Informix 驱动程序的某些部分跳出。请注意,某些选项区分大小写和空格( Description=Informix != description = Informix )。

<小时/>
  • 安装 Informix 客户端 SDK。您不需要软件包中的所有垃圾,只需要 Informix Connect。我假设您使用默认路径 /opt/IBM/informix
  • 添加/opt/IBM/informix/lib/cli/opt/IBM/informix/lib/esql到您的动态链接器查找路径。在 Fedora 上,您可以通过将它们放入新文件 /etc/ld.so.conf.d/informix.conf 中来完成此操作。
  • 创建一个新的 /etc/odbc.ini并添加以下内容:

    [ODBC Data Sources]
    Infdrv1=IBM INFORMIX ODBC DRIVER
    [Infdrv1]
    Driver=/opt/IBM/informix/lib/cli/iclit09b.so
    Description=Informix
    Database=WHATEVER_YOUR_DB_NAME_IS
    Servername=WHATEVER_YOUR_SERVER_NAME_IS
    CLIENT_LOCALE=en_us.8859-1 # MAY BE DIFFERENT
    DB_LOCALE=en_us.819 # MAY BE DIFFERENT
    [ODBC]
    UNICODE=UCS-2

  • 创建一个新的 /etc/odbcinst.ini并添加以下内容

    [IBM INFORMIX ODBC DRIVER]
    Description=Informix Driver
    Driver=libifcli.so

  • 您需要设置环境变量INFORMIXDIRODBCINI 。在 Fedora 上,您可以添加一个新文件 /etc/profile.d/informix.sh并添加

    export INFORMIXDIR=/opt/IBM/informix
    export ODBCINI=/etc/odbc.ini

  • 编辑 /opt/IBM/informix/etc/sqlhosts并将您的基本连接信息放在那里。在最简单的情况下,它只有一行内容:

    YOUR_SERVER_NAME\tonsoctcp\tYOUR_DB_NAME\tpdap-np

    请注意pdap-np实际上是端口 1526,它也是 Informix“Turbo”驱动程序 tcp 端口。查看您的/etc/services

  • 创建一个空的 .odbc.ini在你的$HOME例如通过touch $HOME/.odbc.ini 。它需要在那里。它必须是 0 字节。我喜欢这一部分。

  • 从您最喜欢的存储库安装 unixODBC 和 pyodbc。

<小时/>

请记住让您的环境发生变化,例如通过重新启动。您现在可以像这样连接:

import pyodbc
DRIVER = 'IBM INFORMIX ODBC DRIVER'
SERVER = 'YOUR_SERVER_NAME'
DATABASE = 'YOUR_DB_NAME'
constr = 'DRIVER={%s};SERVER=%s;DATABASE=%s;UID=%s;PWD=%s' % (DRIVER, SERVER, DATABASE, USER, PASS)
con = pyodbc.connect(constr, autocommit=False)

从那里您可以获取光标、执行查询、获取结果等。请注意,IBM 的 ODBC 驱动程序中存在许多奇怪的错误,这是我无法想象的:

  • 包含 NULL 的行s 可能会导致段错误,因为 IBM 驱动程序将 32 位 int 放入预计 64 位 int 表示值为 null 的位置。如果您受到此影响,您需要为所有可能的列类型修补 unixODBC 来处理此问题。
  • 没有名称的列会导致驱动程序出现段错误(例如 SELECT COUNT(*) FROM foobar 需要为 SELECT COUNT(*) AS c FROM foobar )。
  • 确保您的编码确实按预期工作。 UTF8 对于 IBM 来说还不够企业级,而 UCS-2 是我唯一需要工作的东西。

关于python - 如何让 Python 和 Informix 在 Linux 上对话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32897252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com