Ian*_*Ian 12 python postgresql psycopg2
我正在使用Postgres 9和Python 2.7.2以及psycopg2,并尝试使用正确转义的引号插入字符串值数组.样品:
metadata = {"Name": "Guest", "Details": "['One', 'Two', 'Three']"}
cur.execute("insert into meta values ('%s');" % metadata)
Run Code Online (Sandbox Code Playgroud)
抛出异常:
psycopg2.ProgrammingError: syntax error at or near "One"
LINE 1: "Details": "['One...
^
Run Code Online (Sandbox Code Playgroud)
我也尝试使用Postgres'E与反斜杠一起逃脱,但还没有找到正确的组合.想法?
pir*_*iro 20
你必须让psycopg为你做参数绑定:不要试图自己引用它们.
Psycopg自动将python字符串列表转换为postgres数组.查看http://initd.org/psycopg/docs/usage.html
当你想通过 SQL 将数组插入到 postgreSQL 数据库中时,你可以这样做:
INSERT INTO tablename VALUES ('{value1,value2,value3}');
Run Code Online (Sandbox Code Playgroud)
注意:您需要用单引号将花括号括起来!所以实际上你正在将特殊“数组”语法的 String/Varchar 传递给数据库
如果我将你的代码输入到 python 解析器中,我会得到如下内容:
'{'Name': 'Guest', 'Details': "['One', 'Two', 'Three']"}'
Run Code Online (Sandbox Code Playgroud)
但 PostgreSQL 期望的是这样的:
'{"Name","Guest","Details",{"One","Two","Three"}}'
Run Code Online (Sandbox Code Playgroud)
检查数组手册:http://www.postgresql.org/docs/9.0/static/arrays.html
因此,您可以根据 PostgreSQL“数组语法”通过编写辅助函数来格式化字符串,或者使用可以为您完成此操作的库。
| 归档时间: |
|
| 查看次数: |
23978 次 |
| 最近记录: |