1

^Python 2.4.3 を使用して区切りファイルを DB2 データベースにインポートしようとすると、以下のエラーが発生します。

エラー:

Traceback (most recent call last):
  File "C:\Python25\Usefulscripts\order.py", line 89, in <module>
    load_order_stack() 
  File "C:\Python25\Usefulscripts\order.py", line 75, in load_order_stack
    conn2.execute(importTmp)
ProgrammingError: ('42601', '[42601] [IBM][CLI Driver][DB2/LINUXX8664] SQL0104N  An unexpected token "orders_extract"

「からのインポート」の後に見つかりました。

コード:

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()
4

2 に答える 2

2

IMPORT は SQL ステートメントではありません。これは DB2 コマンド行プロセッサー (CLP) コマンドであるため、CLP によってのみ実行できます。

ADMIN_CMD() ストアド プロシージャへの呼び出しを介した一部の CLP コマンドへの SQL インターフェイスがあります。マニュアルを確認してください: ADMIN_CMD を使用した IMPORT

于 2013-05-15T11:43:24.387 に答える
1

ファイルを 1 行ずつ読み取り、データベースに挿入するオプションもあります。これは、どのネイティブ インポート操作よりも確実に遅くなります。区切りファイル構造があり、ファイルの名前が次のとおりであると仮定しますinput.txt

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()

commit()配置をいじってみましょう。おそらく、パフォーマンスを向上させるためにバッチでコミットしたいと思うでしょう。

于 2013-05-15T13:34:43.547 に答える