Python CSV上传错误处理程序

时间:2018-01-19 21:00:53

标签: python mysql

我有一个简单的脚本,可以从一个数据库(Teradata)中下载数据,为它做一些事情,并将其上传到另一个(MySQL)数据库。这已经好几个月了,但昨天在我的日志中我注意到脚本失败了,并且给了我这个错误:

An error has occurred: 
(<class '_mysql_exceptions.ProgrammingError'>, ProgrammingError(1064,
 'You have an error in your SQL syntax; check the manual that
 corresponds to your MySQL server version for the right syntax to use
 near \'A435", NULL, "2018-01-18", 95,\' at line 1'), <traceback object
 at 0x00000000019A1A48>)

似乎罪魁祸首可能是用户可编辑的字段之一,尽管在写入数据库之前,这些字段中的每一个都由PHP中的mysqli_real_escape_string处理 - 所以不确定是否存在。

虽然从编程的角度来理解这里发生的事情会很好,但我更关心的是编辑python脚本以包含一个错误处理程序,它只是跳过任何导致错误的行退出整个剧本。

这是脚本:

# Upload this to MySQL
db = MySQLdb.connect(host='asdf',user='asdf',passwd='asdf',db='asdf')
cursor = db.cursor()

csv_data = csv.reader(file(csvfilename))
for row in csv_data:            
    cursor.execute('INSERT INTO `test` (field_1,field_2,field_3,field_4,field_5)'\
    'VALUES(%s,%s,%s,%s,%s)',row);

db.commit()
# Close the connection to the database.
cursor.close()

1 个答案:

答案 0 :(得分:1)

使用MySQLdb包时,三引号用于引用查询字符串:

来自链接的文档:http://mysql-python.sourceforge.net/MySQLdb.html

  

db.query(&#34;&#34;&#34;选择垃圾邮件,鸡蛋,香肠从早餐价格&lt; 5&#34;&#34;&#34;)

在您的情况下,在解析的行中同时包含单引号和双qutoe,然后脚本会使插入执行崩溃,这可能是巧合。