python - 使用 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 的模块”
我真的认为我只是错误地调用了脚本。谁能看到我做错了什么?
解决方案
这是因为您的文件包含 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()
推荐阅读
- asciidoctor - 使用 Asciidoctor 处理等宽字体
- c++ - 如何使用 setw 和 setfill 重复字符输入?第一部分重复,但第二部分没有
- html - 如何在输入[类型文件]中制作图标(位置:绝对)clickabe?
- groovy - NoClassDefFoundError:Spock 2.0 中的 org.junit.rules.TestName:
- for-loop - Cicle FOR 没有 0
- python - 如何找到具有文本属性但在可单击但没有文本属性的主类中不可单击的类的元素
- windows - Git 将文件列为已更改但没有更改
- lua - 如何有效地提取大型主表中以指定字符串开头的所有值
- python - Python,变量未传入字符串
- java - 从 pod 访问 K8S API