[英]How do I open (twice) file created with tempfile.NamedTemporaryFile()
我使用tempfile.NamedTemporaryFile()
創建臨時文件,並使用一些csv數據將其加載到mysql數據庫中。 我把time.sleep(100)
有時間進行manualy檢查文件是否存在且該文件是否存在並且有正確的數據(我用我的favit文本編輯器檢查),但是當我在MySQL查詢中使用這個文件時,我有錯誤file not found
db = MyDBConnect()
cur = db.cursor()
csvfile = tempfile.NamedTemporaryFile()
with csvfile as f:
f.write("\n".join(results).encode('utf-8'))
sql = "LOAD DATA LOCAL INFILE '" + csvfile.name + "' INTO TABLE MyResults FIELDS TERMINATED BY ','"
cur.execute(sql)
time.sleep(100)
完整的錯誤消息:
Exception _mysql_exceptions.InternalError: (2, "File '/tmp/tmpQtHxe6' not found (Errcode: 2)") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x7f9e3fcef4d0>> ignored
我發現了一些奇怪的東西。 看起來程序不等待cur.execute(sql)
如果我用tempfile.NamedTemporaryFile(delete=False)
創建臨時文件tempfile.NamedTemporaryFile(delete=False)
然后我沒有錯誤,但如果我嘗試刪除文件與os.remove()
后cur.execute(sql)
然后我再次有這個錯誤
來自文檔 :
名稱是否可以用於第二次打開文件,而命名的臨時文件仍然是打開的,因此不同平台(它可以在Unix上使用;它不能在Windows NT或更高版本上使用)。 如果delete為true(默認值),則文件一關閉就會被刪除。
我對mysql並不過分熟悉,但我想你應該在f.seek(0)
之后傳遞文件對象f
而不是嘗試使用.name
再次打開。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.