Postgres/psycopg2 - 插入字符串数组

新手上路,请多包涵

我将 Postgres 9 和 Python 2.7.2 与 psycopg2 一起使用,并尝试插入一个字符串值数组,并正确转义引号。样本:

 metadata = {"Name": "Guest", "Details": "['One', 'Two', 'Three']"}

cur.execute("insert into meta values ('%s');" % metadata)

抛出异常:

 psycopg2.ProgrammingError: syntax error at or near "One"
LINE 1: "Details": "['One...
                      ^

我也试过使用 Postgres 的 E 和反斜杠一起转义,但还没有找到正确的组合。想法?

原文由 Growth Mindset 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 971
2 个回答

当你想通过 SQL 将数组插入到 postgreSQL 数据库中时,你可以这样做:

 INSERT INTO tablename VALUES ('{value1,value2,value3}');

注意: 您需要用单引号将花括号括起来!所以实际上你正在将一个特殊的“数组”语法的 String/Varchar 传递给数据库

如果我将你的代码输入到 python 解析器中,我会得到如下信息:

 '{'Name': 'Guest', 'Details': "['One', 'Two', 'Three']"}'

但是 PostgreSQL 期望这样的事情:

 '{"Name","Guest","Details",{"One","Two","Three"}}'

查看数组手册: http ://www.postgresql.org/docs/9.0/static/arrays.html

因此,您要么通过编写辅助函数根据 PostgreSQL“数组语法”格式化字符串,要么使用为您执行此操作的库。

原文由 das_weezul 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏