从python脚本将文件导入DB2时出错

从python脚本将文件导入DB2时出错,python,db2,pyodbc,Python,Db2,Pyodbc,尝试使用python 2.4.3将带分隔符的文件导入DB2数据库时出现以下错误 错误: 导入不是SQL语句。它是DB2命令行处理器(CLP)命令,因此只能由所述CLP运行 通过调用ADMIN_CMD()存储过程,一些CLP命令有一个SQL接口,请查看手册:您还可以选择逐行读取文件并插入数据库。这肯定比任何本机导入操作都要慢。假设您的分隔文件结构为,并且文件名为input.txt: ORDER_ID^item^price 1^'bat'^50.00 2^'ball'^25.00 代码: 玩一下c

尝试使用python 2.4.3将带分隔符的文件导入DB2数据库时出现以下错误

错误:


导入不是SQL语句。它是DB2命令行处理器(CLP)命令,因此只能由所述CLP运行


通过调用ADMIN_CMD()存储过程,一些CLP命令有一个SQL接口,请查看手册:

您还可以选择逐行读取文件并插入数据库。这肯定比任何本机导入操作都要慢。假设您的分隔文件结构为,并且文件名为
input.txt

ORDER_ID^item^price
1^'bat'^50.00
2^'ball'^25.00
代码:


玩一下
commit()
placement,您可能希望成批提交以提高性能。

请告诉我们您尝试了什么,您认为问题出在哪里。当您向他们展示解决问题的方法时,他们会更乐于提供帮助,而不仅仅是向他们扔工作:)。请尝试将文件名的完整路径放在单引号之间。该文件是否存在于数据库服务器上?嗨,Puciek,是的,我尝试过以各种方式加载该文件-包括带转义字符的引号,以及完全限定路径,但得到了相同的错误Hi Ansgar,不,该文件不存在于数据库服务器上,实际上它位于一个单独的应用服务器上,我在其中运行python脚本。这会是一个问题吗?我可以通过使用下面的“ADMIN\u CMD”命令来消除最初的错误。但是,现在获得一个不同的错误->“错误:(“”,[][IBM][CLI驱动程序][DB2/LINUXX8664]SQL3030C打开输入文件时发生I/O错误(reason=“sqlofopn-2029060079”)。\r\n(-3030)(SQLExecDirectW)”显然DB2无法打开该文件。我希望您认识到,从中导入的文件必须驻留在数据库服务器上,并且实例所有者用户应该可以读取。是否有其他方法可以导入存在于我的应用程序服务器(python脚本驻留的位置)上与db服务器不同的文件?我没有访问数据库服务器文件系统的权限。您可以执行DB2CLP并将IMPORT命令传递给它,确保DB2环境已正确初始化。我认为一种方法是将CONNECT和IMPORT命令写入一个文件,然后调用
db2cmd.exe-cdb2-fyourfile.txt
import pyodbc

def load_order_stack():
    try:
        conn2 = pyodbc.connect('DSN=db2Database;UID=ueserid;PWD=password')
        importTmp = ("import from orders_extract of del modified by coldel0x5E"
                     "insert_update into test.ORDERS_Table (ORDER_ID,item,price);")
        conn2.execute(importTmp)
        conn2.commit()
ORDER_ID^item^price
1^'bat'^50.00
2^'ball'^25.00
import csv
import pyodbc

connection = pyodbc.connect('DSN=db2Database;UID=ueserid;PWD=password')
cursor = connection.cursor()

with open('input.txt', 'rb') as f:
    rows = csv.reader(f, delimiter='^')
    # get column names from header in first line
    columns = ','.join(next(rows))
    for row in rows:
        # build sql with placeholders for insert
        placeholders = ','.join('?' * len(row))
        sql = 'insert into ({}) values ({});'.format(columns, placeholders)

        # execute parameterized database insert
        cursor.execute(sql, row)
        cursor.commit()