2013-05-09 3 views
0

Я пытаюсь разобрать текстовый файл (открытый с помощью параметра encoding = 'utf8') и вставить извлеченные значения в базу данных mdb с помощью модуля pyobbc. Я попытался код ниже:Вставка базы данных 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 Driver] Слишком мало параметров Прогнозный 4. (. -3010) (SQLExecDirectW) ')

PS первая строка моего файла: آ 'A Ab 1 S

И другие строки одного формата.

Ваши комментарии будут оценены :)

+0

Можете ли вы поместить необработанную строку из текстового файла и схемы «Записи»? –

+0

Текстовый файл содержит много строк, каждая строка содержит пять токенов, разделенных вкладкой. Первые три строки, как: آ \t «A \t \t Ab 1 \t S \ П برآ \t \t Бара V1 \t \t 5000 WS \ N بوآ \t \t bo'A N1 WS \ N – 2013-05-09 09:07:09

+0

и таблица «Записи» имеет ровно пять столбцов, как указано в 5-й строке моего кода – 2013-05-09 09:10:30

ответ

2

Вы не поставить кавычки вокруг строк, которые вы хотите вставить. Если предположить, что ряд «Freq» имеет тип 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

Большое спасибо за помощь. Это сработало :) – 2013-05-09 10:02:23