如何以方便稍后在我的程序中使用嵌套列表的方式存储嵌套列表?
Postgres
我计划将列表写入数据库一次并多次重复使用。 我已经能够将嵌套列表存储为
Python
但这不是最佳选择,我试图通过尽可能少的后处理来完成此任务,所以我宁愿做更多的前期工作以提高速度/轻松度在稍后检索时使用。
这些嵌套列表用于布局目的,而不是不良数据规范化。
string
这是我根据
此处
: 在我的数据库中创建的表进行的尝试具有支持 的字段(我正在使用 DBeaver,
的注释是
ARRAY
文本前的下划线
ARRAY
:
)
尝试此操作时:
_text
我收到错误:
CREATE TABLE public.layout (
f_id int8 NULL,
layout _text NULL
);
SQL 错误 [42703]: 错误: 列“list_1”不存在
insert into mpl_layout (f_id, layout)
values (7, ARRAY[["list_1"],["list_2"],["list_3"],["list_4"]]);
在
参数两边添加括号只会更改错误消息:
SQL 错误 [42601]: 错误: 语法错误或接近“7”
ARRAY
我尝试了大括号
insert into mpl_layout (f_id, layout)
values (7, ARRAY([["list_1"],["list_2"],["list_3"],["list_4"]]));
格式:
并收到此错误:
'{}'
SQL错误[22P02]:错误:格式错误的数组文字:
"{[["list_1"],["list_2"],["list_3"],["list_4"]]}" 详细信息:意外
数组元素。
insert into mpl_mosaic_layout (figure_id, layout)
values (7, '{[["list_1"],["list_2"],["list_3"],["list_4"]]}');
接下来我应该尝试什么?
SQL Error [22P02]: ERROR: malformed array literal: "{[["list_1"],["list_2"],["list_3"],["list_4"]]}" Detail: Unexpected array element.
What should I try next?
在 Postgres 中创建多维数组的方式几乎正确。问题在于尝试将字符串文字(例如,“list_1”)插入到应该包含数组的数组中。
以下是如何在 Postgres 中存储和检索嵌套列表(多维数组)的方法:
1. 表创建:
的表创建语句实际上是正确的。无需特殊字符或更改数据类型名称即可表示数组。以下内容有效:
CREATE TABLE public.layout (
f_id int8 NULL,
layout text[] NULL -- 这定义了一个文本数组
);
2. 插入数据:
使用适当的数组语法插入数据。在 Postgres 中,可以使用以下方法构建多维文本数组:
INSERT INTO public.layout (f_id, layout)
VALUES (7, '{{"list_1"}, {"list_2"}, {"list_3"}, {"list_4"}}');
在此语法中:
-
{{...}}
表示外部数组。 -
{...}
表示内部数组。 -
"list_1"
等是的字符串值。
3. 检索数据:
可以使用 SQL
SELECT
语句以及数组索引检索数据:
SELECT layout[1][1] FROM public.layout WHERE f_id = 7;
这将返回
list_1
,因为数组索引从 1 开始。
使用 Python 的其他说明:
-
psycopg2:
如果使用
psycopg2
库,它可以自动处理 Python 列表和 Postgres 数组之间的转换。只需将 Python 列表作为参数传递给 SQL 查询即可,psycopg2
会处理剩下的事情。
```python import psycopg2
conn = psycopg2.connect("的连接字符串") cursor = conn.cursor()
layout = [["list_1"], ["list_2"], ["list_3"], ["list_4"]] cursor.execute("INSERT INTO public.layout (f_id, layout) VALUES (%s, %s)", (7, layout))
conn.commit() conn.close() ```
通过这种方法,可以在不手动格式化数组文字的情况下直接在 Postgres 中高效地存储和检索嵌套列表。
标签:python,postgresql,nested-lists From: 78772897