首页 > 解决方案 > 使用 Python 将二进制文件上传到 postgres 服务器

问题描述

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

python image_save.py shuttle.jpg

为此我收到此错误:“错误:参数之一--store --fetch 是必需的。”

然后我尝试了:

python image_save.py --store shuttle.jpg

我有:

  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_save.py 的模块”

我真的认为我只是错误地调用了脚本。谁能看到我做错了什么?

标签: pythonpostgresqlbinarybinaryfilespsql

解决方案


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

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

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

推荐阅读