将图像插入PostgresSQL

2024-03-28 10:43:35 发布

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

我正试图插入postgres数据库。 这是查询

INSERT INTO public.tblcast(
    castname, castimage)
    VALUES ('Henry Cavill',bytea('E:\Cast\henry.jpg'));

但它显示了一个错误

ERROR:  invalid input syntax for type bytea
LINE 3:  VALUES ('Henry Cavill',bytea('E:\Cast\henry.jpg'));
                                      ^
SQL state: 22P02
Character: 81ERROR:  invalid input syntax for type bytea

列castimage的数据类型为bytea。你知道吗


Tags: forinputtypepostgresjpgvaluessyntaxcast
3条回答

编辑

我已经有一段时间没有回答这个问题了,但我想我弄错了,虽然提问者似乎对答案很满意,但我相信它需要一些评论。感谢丹尼尔·维瑞特!你知道吗

低成本导入

使用^{}可以使用绝对路径导入文件,但它会返回一个类型为^{}的对象,因此需要更改列数据类型,这也是stud3nt在另一个答案中提出的。你知道吗

INSERT INTO public.tblcast(castname, castimage)
VALUES ('Henry Cavill',lo_import('server_path_to_file'));

如果您没有在导入之前将文件放入服务器的特权(像我们大多数人一样),您可以从控制台使用带有^{}\lo_import工具:

echo "\lo_import '/client_path_to_file' \\\ INSERT INTO  public.tblcast VALUES ('Henry Cavil', :LASTOID)" | psql yourdb

loèu出口

psql yourdb -c "SELECT lo_export(castimage, 'path_to_export_file') FROM tblcast;"

pg\u read\u文件(不太灵活):

这个^{}提供了在服务器中读取文件的可能性。但是,它仅限于数据目录路径。如果您想知道它在系统中的位置,请尝试以下命令:

SHOW data_directory

下面是一个如何使用它的方法——正如Mike Pur的回答所示:

INSERT INTO public.tblcast(castname, castimage)
VALUES ('Henry Cavill',pg_read_file('path to file')::bytea);

原始答案:

文件路径中有\。用E转义字符串就可以了。你知道吗

INSERT INTO public.tblcast(castname, castimage)
VALUES ('Henry Cavill',bytea(E'E:\Cast\henry.jpg'));

使用pg\u read\u文件

INSERT INTO public.tblcast(
    castname, castimage)
    VALUES ('Henry Cavill',pg_read_file('E:\Cast\henry.jpg')::bytea);

lo_import('E:\Cast\henry.jpg')代替bytea('E:\Cast\henry.jpg')

相关问题 更多 >