加载本地infile csv到mysql db失败

时间:2017-10-18 10:07:19

标签: python mysql django database csv

我尝试将csv文件导入数据库。但它失败了。

    # -*- coding: utf-8 -*-
import MySQLdb

class Database:

    def __init__(self):

        self.host = 'localhost'
        self.user = 'root'
        self.port =  3306
        self.password = 'root'
        self.db = 'test'
        self.connection = MySQLdb.connect(self.host, self.user, self.password, self.db, self.port, local_infile = 1)
        self.cursor = self.connection.cursor()


    def insert_csv_test(self):

        query = "LOAD DATA LOCAL INFILE ‘/Users/ankr/Desktop/output’ INTO TABLE details FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’"
        self.cursor.execute(query)
        self.connection.commit()
        self.connection.close()
        print("Done")

    def close_connection(self):
        self.connection.close()

database = Database()
database.__init__()
database.insert_csv_test()
database.close_connection()

失败了。见下文。

  

回溯(最近一次呼叫最后):文件" test.py",第30行,in          database.insert_csv_test()文件" test.py",第20行,在insert_csv_test中       self.cursor.execute(query)File" /Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.12-intel.egg/MySQLdb/cursors.py" ,   202行,执行中       self.errorhandler(self,exc,value)File" /Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.12-intel.egg/MySQLdb/connections.py&# 34 ;,   第36行,在defaulterrorhandler中       提出错误类,错误值   _mysql_exceptions.ProgrammingError:(1064,"您的SQL语法有错误;请查看与您的MySQL服务器对应的手册   正确使用near语法的版本   ' \ xe2 \ x80 \ x98 / Users / ankr / Desktop / output \ xe2 \ x80 \ x99 INTO TABLE详细信息   字段终止于\ xe2 \ x80 \ x98,\ xe2 \ x80 \ x99 LI'在第1行")

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

这可能是一个小小的天真答案,但我认为问题在于字符。它被解释为UTF-8角色。尝试使用常规单引号替换它 - '

答案 1 :(得分:1)

看起来你至少在通话中遇到了问题。您将连接到数据库两次:

database = Database()
database.__init__()

你应该跑:

database = Database()

你应该使用\'在SQL查询中(不是'),因为你想避免直接解释它们在另一条评论中已经提到过。