使用Python将二进制文件上传到postgres

2024-03-29 12:06:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图上传一个二进制文件到一个postgres服务器。我想我正确地修改了一个Python脚本(https://gist.github.com/illume/8aa7c2d03273da846bf4361236a4f3f9#file-image_save-py),以便它可以连接到我的postgres服务器,但是我无法在命令行中调用该脚本。据我所知,我需要导航到图像所在的目录_保存.py编写脚本并调用它。我还将一个测试文件放在同一个目录中,因此我尝试执行:

python image_save.py shuttle.jpg

对此,我得到了一个错误:“error:需要一个参数--store--fetch。”

然后我试着:

^{pr2}$

我得到了:

  Traceback (most recent call last):
  File "image_save.py", line 45, in <module>
    main(sys.argv)
  File "image_save.py", line 30, in main
    curs.execute("INSERT INTO files(id, orig_filename, file_data) VALUES (DEFAULT,%s,%s) RETURNING id", (args.filename, filedata))
ValueError: A string literal cannot contain NUL (0x00) characters.

我也试过:

python -m image_save.py shuttle.jpg

我得到了“C:\Python27\python.exe:没有名为image的模块_保存.py““

我真的认为我只是错误地调用了脚本。有人能看出我做错了什么吗?在


Tags: 文件inpyimage服务器目录脚本save
1条回答
网友
1楼 · 发布于 2024-03-29 12:06:45

这是因为您的文件包含空字符,这导致了错误,而且看起来Postgres不允许这些字符

要解决这个问题,只需使用这个简单的脚本从文件中删除那些不好的字符。在

fi = open('shuttle.jpg', 'rb')
data = fi.read()
fi.close()
fo = open('new_shuttle.jpg', 'wb')
fo.write(data.replace('\x00', ''))
fo.close()

相关问题 更多 >