Python:MySQLdb加载数据填充静默失败
我正在尝试使用Python脚本将csv文件导入MySQL数据库。 它似乎悄悄地失败了 这是我的密码: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
#!/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”?什么是“康恩”?