2013-05-15 2 views
1

^로 분리 된 파일을 Python 2.4.3을 사용하여 DB2 데이터베이스로 가져 오는 중에 아래 오류가 발생합니다.python 스크립트에서 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" 

was found following "import from ".

코드 :

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

무엇을 시도했는지 알려주십시오. 문제는 무엇이라고 생각하십니까? 사람들은 당신이 문제 해결에 대한 노력을 보여줄 때 훨씬 행복해합니다. –

+0

작은 따옴표 사이에 전체 경로와 함께 파일 이름을 넣으십시오. 파일이 데이터베이스 서버에 있습니까? –

+0

안녕하세요 Puciek, 네, 파일을 다양한 방법으로로드하려고했는데 - 정규 경로와 함께 인용 가사 이스케이프 문자를 포함하지만 동일한 오류가 발생했습니다. – user2385306

답변

2

IMPORT는 SQL 문이 아닙니다. 이는 DB2 명령 행 처리기 (CLP) 명령이므로 해당 CLP에 의해서만 실행될 수 있습니다.

ADMIN_CMD() 저장 프로 시저 호출을 통해 일부 CLP 명령에 대한 SQL 인터페이스가있다, 설명서를 확인하십시오 : IMPORT using ADMIN_CMD

+0

아래와 같이 "ADMIN_CMD"명령을 사용하여 원래의 오류를 제거 할 수있었습니다. 그러나 다른 오류가 발생했습니다. -> "오류 : ('', '[] [IBM] [CLI Driver] [DB2/LINUXX8664] SQL3030C I/O 오류 (이유 ="sqlofopn -2029060079 ")가 입력 파일. \ r \ n (-3030) (SQLExecDirectW) ') " – user2385306

+0

분명히 DB2가 파일을 열 수 없습니다. 가져온 파일이 데이터베이스 서버에 있어야하며 인스턴스 소유자 사용자가 읽을 수 있어야합니다. – mustaccio

+0

파이썬 스크립트가있는 응용 프로그램 서버에있는 파일을 db 서버와 다른 파일로 가져올 수있는 다른 방법이 있습니까? 데이터베이스 서버 파일 시스템에 액세스 할 수 없습니다. – user2385306

0

또한 라인으로 파일 라인을 읽기,에 삽입하는 옵션이 있습니다 귀하의 데이터베이스. 이것은 네이티브 가져 오기 작업보다 확실히 느립니다. 당신의 구분 된 파일 구조를 가정하고, 파일이 input.txt라는 :

ORDER_ID^item^price 
1^'bat'^50.00 
2^'ball'^25.00 

코드 : commit() 위치와 주변

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

재생, 당신은 아마 성능 향상을 위해 일괄 적으로 커밋합니다.