0

我正在编写一个脚本来逐行读取文件中的数据并将每一行插入 MySQL 数据库。我使用 mysql.connector 来做到这一点。这是一段脚本。

def insert_query(data):
    return ("INSERT INTO " + tblname + " (`log`) " + "VALUES " + "(" + "'" + data + "'" + ")")
with open('data.txt', 'r') as f:
    lines = f.readlines()

for line in lines:
    add_line = insert_query(line)
    cursor.execute(add_line)
    cursor.commit()

文件 data.txt 的大小为 5Mbyte,但它有大约 10000 行。tblname 有 2 个字段:ID - INT (11) (auto-increment) , log - TEXT 当我运行这个脚本时,它添加到数据库中大约 100 行并崩溃。它报告一个错误:

mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册中的 ')'

MySQL 版本:5.5.27 这个问题怎么解决?谢谢。

4

1 回答 1

0

您的插入语句不正确:函数中未定义“tblname”,因此出现语法错误。但是,如何解决它存在更大的问题:如果日志中的一行包含引号和括号怎么办?

以下代码显示了如何从文件中读取数据并逐行插入:

stmt = "INSERT INTO {table} (c1) VALUES (%s)".format(table=table_name) 

with open('data.txt', 'r') as fp:
    for line in fp:
        data = (line.strip(),)
        cur.execute(stmt, (line.strip(),))
cnx.commit()

或者使用 executemany(),这样会更快:

with open('data.txt', 'r') as fp:
    cur.executemany(stmt, [(line.strip(),) for line in fp])
cnx.commit()
于 2013-07-09T09:44:12.043 回答