我使用tempfile.NamedTemporaryFile()
和一些csv数据创建临时文件,将其加载到mysql数据库中。我让time.sleep(100)
有时间进行手动检查文件是否存在且该文件是否存在并且有正确的数据(我用我的favit文本编辑器检查),但是当我在MySQL查询中使用这个文件时,我有错误{{ 1}}
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)
后的文件os.remove()
然后我再次出现此错误
答案 0 :(得分:1)
来自docs:
这个名称是否可以用来第二次打开文件,而命名的临时文件仍然是打开的,因此不同平台(它可以在Unix上使用;它不能在Windows NT或更高版本上使用)。如果delete为true(默认值),则文件一关闭就会被删除。
我对mysql并不过分熟悉,但我想你可能会在f
没有尝试使用f.seek(0)
再次打开后传递文件对象.name
。