2013-05-09 2 views
0

저는 텍스트 파일 (매개 변수 인코딩 = 'utf8'로 열림)을 구문 분석하고 pyodbc 모듈을 사용하여 추출 된 값을 mdb 데이터베이스에 삽입하려고했습니다. 나는 코드 아래 시도 :Python 데이터베이스 삽입

for line in fp: 
    tokens = line.split('\t') 
    tokens[4] = tokens[4][:len(tokens[4])-1] #to avoid the \n 
    tokens[1] = tokens[1][1:] #to remove the 'u' from the beginning of utf8 characters like u'\u0622' 
    content = conn.execute("INSERT INTO Entries (PForm, WForm, Code, Freq, Pattern) VALUES ("+tokens[0]+","+tokens[1]+","+tokens[2]+","+tokens[3]+","+tokens[4]+")") 
    conn.commit() 

다음과 같은 오류 접수 : 오류 : ('07002', '[07002] [Microsoft] [ODBC Microsoft Access 드라이버] 매개 변수가 너무 적습니다 4. 예상을 (. -3010) (SQLExecDirectW) ')

PS 내 파일의 첫 번째 줄은 다음과 같습니다. Â 'Ab 1 S

그리고 다른 줄의 형식은 같습니다.

귀하의 의견은 이해 될 것이다 : 당신은 삽입 할 문자열 주위에 따옴표를 넣지 마십시오

+0

텍스트 파일과 "Entries"스키마에서 생 라인을 넣을 수 있습니까? –

+0

텍스트 파일에는 여러 줄이 들어 있으며 각 줄에는 탭으로 구분 된 다섯 개의 토큰이 있습니다. 세 제 선 등을들 수있다 : آ \t 'A \t Ab의 \t 1 \t S \ 없음 برآ \t 바라 \t V1 \t 5000 \t WS는 N بوآ \t bo'A \t N1을 \ \t 1 \t WS는 N –

+0

을 \ 및 "Entries"테이블은 내 코드 –

답변

2

. 은 "주파수"행을 가정하면 INTEGER 유형입니다 :

stmt = """ 
INSERT INTO Entries (PForm, WForm, Code, Freq, Pattern) 
    VALUES ('%s', '%s', '%s', %s, '%s') 
""" 

params = tuple(t for t in tokens) 

conn.execute(stmt % params) 

어쨌든,이 같은 INSERT 문을 포맷 할 수 없습니다. 사용중인 라이브러리가 명령문을 매개 변수화하는 기능을 제공하지 않습니까? 다음과 같은 것이 있습니다 :

conn.execute("INSERT INTO Foo VALUES (?, ?, ?)", (foo, bar, baz)) 
+0

도움 주셔서 대단히 감사합니다. 그것은 일했다 :) –