Informix“加载”命令在 Python pyodbc 中不起作用

Posted

技术标签:

【中文标题】Informix“加载”命令在 Python pyodbc 中不起作用【英文标题】:Informix "load" command is not working in Python pyodbc 【发布时间】:2018-03-13 18:59:11 【问题描述】:

我们正在编写一个实用程序来将数据加载到 Informix DB。

我们的实用程序是用 Python 编写的,我们使用 pyodbc 包来连接和执行 SQL。

选择和插入查询工作正常。

但是,sql

“从输入文件分隔符'|'加载插入表格”

失败并出现以下错误。

pyodbc.ProgrammingError: ('42000', '[42000] [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. (-201) (SQLExecDirectW)') 

pyodbc 是否不支持 Informix 中的“加载”命令?

提前感谢帮助。

谢谢,

【问题讨论】:

【参考方案1】:

不幸的是,'LOAD from ...'(和 'UNLOAD TO ...')仅适用于 DBACCESS 和 ISQL。没有任何客户端 API (ODBC/JDBC/.NET) 支持这些命令。

【讨论】:

谢谢J_S的解释【参考方案2】:

作为J_Ssaid,LOAD命令是前端工具实现的伪SQL命令;它不是由数据库服务器实现的。

还有许多其他具有相同属性的相关命令:

LOAD UNLOAD OUTPUT INFO

LOAD 的复杂因素之一是文件名由本地计算机上的客户端指定,但文件的内容可能必须通过网络传输到数据库服务器所在的位置。这不是一个无法克服的问题。 BLOB 和 CLOB 文件可能会出现类似问题,并且已得到解决。

这些操作都是由 ISQL 和 DB-Access 实现的(以及通过我的SQLCMD 之类的工具——您可能需要注册才能下载它,但注册是免费的,电子邮件负载也不繁重)。

【讨论】:

难道我们没有类似 sqlcmd 的 python 库来执行此操作吗?我假设 pyodbc 是通用的,这就是它不支持的原因,并且任何 Informix 特定的 python 库都将实现它。 如果它被实现,那将是由对 pyodbc 有足够了解的人知道如何可靠地做到这一点,并由谁提供代码。有文件读取(不太复杂)、字段拆分、类型管理(BYTE 和 TEXT blob 很棘手;其余大部分都是可管理的,但 BLOB 和 CLOB 也存在一些问题),然后是基本插入(即最简单的部分)。 谢谢乔纳森,我们修改了脚本以执行“插入”而不是“加载”【参考方案3】:

使用外部表加载数据怎么样? INSERT INTO target1 SELECT * FROM ext1;

https://www.ibm.com/support/knowledgecenter/en/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_2068.htm

【讨论】:

感谢 Nagaraju 的评论,这对我来说是新事物。

以上是关于Informix“加载”命令在 Python pyodbc 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Informix、pyodbc、Centos

如何在 Python 中为不和谐的机器人创建重新加载命令?

如何使用 informix.jvp.dbapplet.impl.JVPClassLoader 从类路径加载资源?

64 位 .NET Informix ADO.NET 提供程序的程序集加载错误

informix SQL查询咨询

Python - Informix - 字符到数字的转换错误 (-1213)