使用mysqldb

时间:2017-12-22 15:08:02

标签: python mysql-python

我在尝试在某些python代码中执行查询时遇到InterfaceError:(0,'')。我将使用下面的代码发布代码。

 def insert_into_table(schema, table, connection, filename = 'pathToAnInputFile'):
        x = connection.cursor()
        with open(filename, 'rb') as csvfile:
            reader = csv.reader(csvfile, delimiter=',', quotechar='"')
            next(reader)
            for line in reader:
                query = "INSERT INTO {0}.{1} (field1, field2, field3) VALUES ('{2}', '{3}', '{4}')".format(table, schema, line[0], line[1], line[2])
                print query
                x.execute(query)
                conn.commit()

        conn.close()

import MySQLdb
import csv as csv
conn = MySQLdb.connect("localhost", "nottheusername", "notthepassword", db="adb") 

insert_into_table('atablename', 'adb', conn)

这是我得到的输出

  

INSERT INTO adb.atablename(field1,field2,field3)VALUES(' dogs',   '小狗',' 2017年11月21日')       -------------------------------------------------- -------------------------       InterfaceError Traceback(最近一次调用最后一次)        in()       ----> 1 insert_into_table(' atablename',' adb',conn)

<ipython-input-24-02df4bf9bbdb> in insert_into_table(schema, table, connection, filename)
      8             query = "INSERT INTO {0}.{1} (RMS_CLASS_NM, campaign, ad_group) VALUES ('{2}', '{3}', '{4}')".format(table,
     

架构,行[0],行[1],行[2])             9打印查询       ---&GT; 10 x.execute(查询)            11 conn.commit()            12

C:\Users\braddavi\AppData\Local\Continuum\Anaconda2\lib\site-packages\MySQLdb\cursors.pyc
     执行中的

(self,query,args)           224除了例外:           225 exc,value = sys.exc_info()[:2]        - &GT; 226 self.errorhandler(self,exc,value)           227 self._executed =查询           228如果不是self._defer_warnings:self._warning_check()

C:\Users\braddavi\AppData\Local\Continuum\Anaconda2\lib\site-packages\MySQLdb\connections.pyc
     

在defaulterrorhandler中( 解析参数失败 )            34 del连接            35 if isinstance(errorvalue,BaseException):       ---&GT; 36提高误差值            37如果errorclass不是None:            38提高错误类别(错误值)

InterfaceError: (0, '')

我已经做了一些搜索有关此特定错误的信息,似乎它通常与创建全局游标而不是在使用它的函数中创建的本地游标相关联,但是在这种情况下,这不是问题 - 或者至少如果是这样,对我来说并不是显而易见的。

我还应该指出,如果我从打印查询行打印出来的查询并直接在mysqldb终端中执行它,它会毫无困难地执行和插入数据。

如果有人可以提供帮助,我们将不胜感激。

祝大家节日快乐。 布拉德

1 个答案:

答案 0 :(得分:0)

我不确定这是否符合完整答案,但我找到了解决方案。我没有在同一个函数中打开使用csv.reader,而是试图将数据推入表中,而是将其分解为两个独立的函数。第一个读取CSV文件并将每行存储为列表,然后将所有列表存储为列表列表。然后将该列表列表传递给不同的例程以将数据插入表中。我不知道为什么会解决这个问题,除非它与csv reader和mysqldb有些奇怪的不兼容。无论哪种方式,如果有人遇到此问题,这是一个可能适合您的解决方案。