簡體   English   中英

如何打開(兩次)使用tempfile.NamedTemporaryFile()創建的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM