0

我一直在尝试解析一个文本文件(使用参数 encoding='utf8' 打开)并使用 pyodbc 模块将提取的值插入到 mdb 数据库中。我试过下面的代码:

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

其他行的格式相同。

您的意见将不胜感激:)

4

1 回答 1

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))
于 2013-05-09T09:27:29.500 回答