Python:MySQLdb加载数据填充静默失败

Python:MySQLdb加载数据填充静默失败,python,mysql,mysql-python,load-data-infile,Python,Mysql,Mysql Python,Load Data Infile,我正在尝试使用Python脚本将csv文件导入MySQL数据库。 它似乎悄悄地失败了 这是我的密码: #!/usr/bin/python import MySQLdb class DB: host = 'localhost' user = 'root' password = '**************' sqldb = 'agriculture' conn = None def connect(self): self.co

我正在尝试使用Python脚本将csv文件导入MySQL数据库。 它似乎悄悄地失败了

这是我的密码:

#!/usr/bin/python

import MySQLdb

class DB:
    host = 'localhost'
    user = 'root'
    password = '**************'
    sqldb = 'agriculture'
    conn = None

    def connect(self):
        self.conn =  MySQLdb.connect(self.host,self.user,self.password,self.sqldb )

    def query(self, sql, params=None):
        try:
            cursor = self.conn.cursor()
            if params is not None:
                cursor.execute(sql, params)
            else:
                cursor.execute(sql)
        except (AttributeError, MySQLdb.OperationalError):
            self.connect()
            cursor = self.conn.cursor()
            if params is not None:
                cursor.execute(sql, params)
            else:
                cursor.execute(sql)

        print vars(cursor)
        return cursor

    def load_data_infile(self, f, table, options=""):
        sql="""LOAD DATA LOCAL INFILE '%s' INTO TABLE %s FIELDS TERMINATED BY ',';""" % (f,table)
        self.query(sql)


db = DB()

pathToFile = "/home/ariggi/722140-93805-sqltest.csv"
table_name = "agriculture.degreedays"

db.load_data_infile(pathToFile, table_name)
为了调试这种情况,我在“query()”方法中将游标对象转储到屏幕上。以下是输出:

{“结果”:无,“描述”:无,“行数”:0,“消息”:[], “_executed”:“加载数据本地填充” “/home/ariggi/722140-93805-sqltest.csv”输入到表degreedays字段中 以“,”;“,”errorhandler“:>,”行计数“:500L,”连接“:,”描述标志“:无终止, “arraysize”:1,“U信息”:“记录:500已删除:0已跳过:0” 警告:0,“lastrowid”:0L,“上次执行”:“加载本地数据” 将“/home/ariggi/722140-93805-sqltest.csv”填入表agriculture.degreedays 以“,”;“,“_警告”结尾的字段:0,_行:()}

如果我接受“\u last\u executed”查询

LOAD DATA LOCAL INFILE '/home/ariggi/722140-93805-sqltest.csv' INTO TABLE agriculture.degreedays FIELDS TERMINATED BY ',';
并通过mysql控制台运行它,它按预期工作,并用行填充表。但是,当我执行此脚本时,我的数据库表仍然为空


我被难住了,需要一些帮助

尝试在代码末尾调用
db.conn.commit()
,使更改永久化。Python默认情况下不使用“自动提交”模式,因此,在发出提交之前,DB模块将您的更改视为不完整事务的一部分

正如@AirThomas在一篇评论中指出的,它有助于我们成为“上下文管理器”——尽管我认为正确的表述是

with conn.cursor() as curs:
    do_something_with(curs)

因为这将自动提交任何更改,除非受控代码引发异常。

尝试在代码末尾调用
db.conn.commit()
以使更改永久化。Python默认情况下不使用“自动提交”模式,因此,在发出提交之前,DB模块将您的更改视为不完整事务的一部分

正如@AirThomas在一篇评论中指出的,它有助于我们成为“上下文管理器”——尽管我认为正确的表述是

with conn.cursor() as curs:
    do_something_with(curs)

因为这将自动提交任何更改,除非受控代码引发异常。

尝试在代码末尾调用
db.conn.commit()
以使更改永久化。Python默认情况下不使用“自动提交”模式,因此,在发出提交之前,DB模块将您的更改视为不完整事务的一部分

正如@AirThomas在一篇评论中指出的,它有助于我们成为“上下文管理器”——尽管我认为正确的表述是

with conn.cursor() as curs:
    do_something_with(curs)

因为这将自动提交任何更改,除非受控代码引发异常。

尝试在代码末尾调用
db.conn.commit()
以使更改永久化。Python默认情况下不使用“自动提交”模式,因此,在发出提交之前,DB模块将您的更改视为不完整事务的一部分

正如@AirThomas在一篇评论中指出的,它有助于我们成为“上下文管理器”——尽管我认为正确的表述是

with conn.cursor() as curs:
    do_something_with(curs)

因为这将自动提交任何更改,除非受控代码引发异常。

就是这样做的。谢谢我现在更困惑了,因为它在没有commit语句的情况下运行得更早。如果您在未提交的情况下运行两个查询,第二个查询是否提交第一个查询?@Mike如果您使用
和conn作为光标:
模块将为您提供一个光标,以便在
块内使用,并在您退出块时提交。非常好的建议!我希望你不介意我把它写进我的答案中(当然要有足够的信用)。什么是“db”?“康恩”是什么?就是这个。谢谢我现在更困惑了,因为它在没有commit语句的情况下运行得更早。如果您在未提交的情况下运行两个查询,第二个查询是否提交第一个查询?@Mike如果您使用
和conn作为光标:
模块将为您提供一个光标,以便在
块内使用,并在您退出块时提交。非常好的建议!我希望你不介意我把它写进我的答案中(当然要有足够的信用)。什么是“db”?“康恩”是什么?就是这个。谢谢我现在更困惑了,因为它在没有commit语句的情况下运行得更早。如果您在未提交的情况下运行两个查询,第二个查询是否提交第一个查询?@Mike如果您使用
和conn作为光标:
模块将为您提供一个光标,以便在
块内使用,并在您退出块时提交。非常好的建议!我希望你不介意我把它写进我的答案中(当然要有足够的信用)。什么是“db”?“康恩”是什么?就是这个。谢谢我现在更困惑了,因为它在没有commit语句的情况下运行得更早。如果您在未提交的情况下运行两个查询,第二个查询是否提交第一个查询?@Mike如果您使用
和conn作为光标:
模块将为您提供一个光标,以便在
块内使用,并在您退出块时提交。非常好的建议!我希望你不介意我把它写进我的答案中(当然要有足够的信用)。什么是“db”?什么是“康恩”?