提问人:Jane 提问时间:1/10/2020 更新时间:6/12/2022 访问量:604
在 PostgreSQL 表中插入 ARRAY,并在值中使用撇号
Insert ARRAY in PostgreSQL table with apostrophes in values
问:
我有一个带有 SQL insert 语句的 Python 脚本,该语句将解析的数据从文件插入到 PostgreSQL 表。如果数据有撇号,则执行失败。详细地:
<name>RYAZAN'</name>
or
<name>CHYUL'BYU</name>
当它是一个字符串时,我找到了解决方案 -> 在撇号中添加额外的 ',以便它转换为 INSERT 语句或在 INSERT 语句中。'RYAZAN'''
'CHYUL''BYU'
但是,如果我的值在列表中(来自 python 脚本),就像 Python 一样,会自动放置双引号而不是单引号。因此,当尝试插入city = ["RYAZAN''", "CHYUL''BYU"]
INSERT INTO City (uuid, name) VALUES (uuid_generate_v4(), unnest(array{city}))
SQL 失败并显示错误
ERROR: column "RYAZAN''.." does not exist
因为 SQL 将双引号读取为列名或其他名称。有没有办法插入包含撇号的值的 ARRAY?
答:
0赞
Jim Jones
1/10/2020
#1
尝试使用 $$ 美元引号字符串
CREATE TEMP TABLE t (f TEXT);
INSERT INTO t VALUES ($$<name>CHYUL'BYU</name>$$),
($$<name>RYAZAN'</name>$$);
SELECT * FROM t;
f
------------------------
<name>CHYUL'BYU</name>
<name>RYAZAN'</name>
(2 Zeilen)
还有许多其他方法可以转义引号
INSERT INTO t
VALUES (E'\'foo'),('''bar'''),
('"the answer is" -> ''42'''),($$It's "only"" $1.99$$);
SELECT * FROM t;
f
-------------------------
'foo
'bar'
"the answer is" -> '42'
It's "only"" $1.99
(4 Zeilen)
演示:db<>fiddle
评论
Parameterized Query