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.jvp.dbapplet.impl.JVPClassLoader 从类路径加载资源?