如何使用Python从MySQL打开BLOB文件而不保存?

如何使用Python从MySQL打开BLOB文件而不保存?,python,mysql,Python,Mysql,代码: 它做什么 上面的代码-从MySQL获取存储为BLOB的文件,并将一个.docx文件保存到一个文件夹中 问题: 但不是保存它,而是查看它,然后删除它。我能简单地在word中打开BLOB而不保存它吗 如果是这样,怎么做?通常,可以使用内置模块io将二进制数据(如BLOB实体)作为类似文件的对象传递,例如: 输入io f=io.BytesIOdata f现在可以在任何需要文件对象的地方使用 但你的问题实际上更多地归结于MS Word打开未保存在磁盘上任何位置的文件的能力。我认为它做不到。最佳实

代码:

它做什么

上面的代码-从MySQL获取存储为BLOB的文件,并将一个.docx文件保存到一个文件夹中

问题:

但不是保存它,而是查看它,然后删除它。我能简单地在word中打开BLOB而不保存它吗


如果是这样,怎么做?

通常,可以使用内置模块io将二进制数据(如BLOB实体)作为类似文件的对象传递,例如:

输入io f=io.BytesIOdata f现在可以在任何需要文件对象的地方使用 但你的问题实际上更多地归结于MS Word打开未保存在磁盘上任何位置的文件的能力。我认为它做不到。最佳实践可能是使用tempfile生成临时文件,这样您至少可以期望系统最终清理它:

导入临时文件 对于tempfile.NamedTemporaryFilesuffix='.docx',delete=False作为f: f、 书面数据 printf.name 编辑:

特别是在您的代码中,您可以尝试以下方法将数据存储在临时文件中,并在MS Word中自动打开它:

导入临时文件,子进程 WINWORD_PATH=r'C:\Program Files x86\Microsoft Office\Office14\WINWORD.exe' def open_as_temp_docxdata: 对于tempfile.NamedTemporaryFilesuffix='.docx',delete=False作为f: f、 书面数据 subprocess.Popen[WINWORD_PATH,f.name] cursor=db_config.cursor 尝试: sampleNum=sampleNum+1; query=从id=%s的文档\u控件中选择文件附件 cursor.executequery,sampleNum, 打开\u as\u temp\u docxcersor.fetchone[0] 我手头没有微软Word的Windows电脑,所以我无法测试。机器上winword.exe的路径可能会有所不同,因此请确保它是正确的

编辑:

如果必须在MS Word关闭后立即删除该文件,则以下操作应起作用:

导入临时文件、子进程、操作系统 WINWORD_PATH=r'C:\Program Files x86\Microsoft Office\Office14\WINWORD.exe' def open_as_temp_docxdata: 对于tempfile.NamedTemporaryFilesuffix='.docx',delete=False作为f: f、 书面数据 subprocess.Popen[WINWORD\u PATH,f.name]。请稍候 如果os.path.existsf.name: os.unlinkf.name
那就行了!使用我当前的代码-我将用什么替换你的代码?你是在Windows、Linux还是macOS上?我当前使用的Windows你好,谢谢-Get-Microsoft word error=抱歉,我们找不到你的文件。它是否被移动、重命名或删除?c:…tmpylcf3leg.docxOops,默认情况下,tempfile会在您完成写入后立即删除文件。我在上面添加了delete=False,这将使文件保持足够长的时间,以便Word打开它。
import mysql.connector
import sys

def write_file(data, filename):
    with open(filename, 'wb') as f:
        f.write(data)

sampleNum = 0;
db_config = mysql.connector.connect(user='root', password='test',
                      host='localhost',
                      database='technical')
# query blob data form the authors table
cursor = db_config.cursor()

try:
    sampleNum=sampleNum+1;
    query = "SELECT fileAttachment FROM document_control WHERE id=%s"
    cursor.execute(query,(sampleNum,))
    file = cursor.fetchone()[0]
    write_file(file, 'User'+str(sampleNum)+'.docx')


except AttributeError as e:
    print(e)
finally:
    cursor.close()