我正在嘗試使用Python腳本將csv文件導入到MySQL數據庫中。 它似乎失敗了。Python:MySQLdb LOAD DATA INFILE默默失敗
這裏是我的代碼:
#!/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)
在嘗試調試這種情況下,我傾銷「查詢()」方法中的光標對象到屏幕上。下面是輸出:
{ '_result':無, '描述':無, 'ROWNUMBER':0, '消息':[], '_executed':「LOAD DATA LOCAL INFILE 「/ home/ariggi/722140-93805-sqltest.csv'INTO TABLE degreedays FIELDS TERMINATED BY',';','errorhandler':>,'rowcount':500L,'connection':,'description_flags':None, ' arrayize':1,'_info':'Records:500 Deleted:0 Skipped:0 Warnings:0','lastrowid':0L,'_last_executed':「LOAD DATA LOCAL INFILE'/ home/ariggi/722140-93805 -sqltest.csv'INTO TABLE agriculture.degreedays FIELDS TERMINATED BY',';「,'_warnings':0,'_rows':()}
如果我參加了「_last_executed」查詢,這是
LOAD DATA LOCAL INFILE '/home/ariggi/722140-93805-sqltest.csv' INTO TABLE agriculture.degreedays FIELDS TERMINATED BY ',';
,並通過MySQL控制檯能夠正常運行,並與行填充表運行它。但是當我執行這個腳本時,我的數據庫表仍然是空的。
我很難過,可以使用一些幫助。
這樣做。謝謝!現在我更加困惑,因爲它沒有提交聲明就提前工作。如果在沒有提交的情況下運行2個查詢,第二個查詢是否提交第一個查詢? –
@Mike如果你使用'with conn作爲遊標:'模塊會給你一個在'with'代碼塊內部使用的遊標,並且當你退出該模塊時提交。 – Air
很棒的建議!我希望你不要介意我把它加入我的答案中(自然而然地應該有信用)。 – holdenweb