【问题标题】:PostgreSQL document based in python基于python的PostgreSQL文档
【发布时间】:2018-03-07 15:23:23
【问题描述】:

根据业务需求,我们需要在python中从基于PostgreSQL文档的数据库中获取数据

PostgreSQL:

select info from "spyConfig" where info @> '{"type" : "processmap"}';

它在 postgresql 界面中按预期工作,我想在 python 中执行相同的查询。

cur.execute("SELECT info FROM spyConfig WHERE info @> %s", 
{'type':'processmap'})

它在 python 中不起作用,即使我想将表作为参数传递,我在这里尝试过并对其进行研究,但它在 python 中不起作用。 请给我解决这个问题的建议,如果有任何细节要添加,请告诉我,我会根据需要更新,谢谢。

【问题讨论】:

标签: python json python-3.x postgresql


【解决方案1】:

问题是你没有以正确的方式传递你的字典,你应该像这样传递它:

from psycopg2.extras import Json

cur.execute("SELECT info FROM spyConfig WHERE info @> %s", [Json({'type':'processmap'})])

如果你还想添加表名,那么

from psycopg2.extensions import AsIs
from psycopg2.extras import Json

kwargs = {'table': AsIs('spyConfig'),
          'q': [Json({'type':'processmap'})]}

cur.execute("SELECT info FROM %(table)s WHERE info @> %(q)s", kwargs)

【讨论】:

  • cur.execute("SELECT info FROM %s WHERE info @> %s", ["spyConfig", Json({'type':'processmap'})]) 我得到以下错误:psycopg2.ProgrammingError:postgresql数据库中“'spyConfig'”或附近的语法错误创建了一个带引号的表“spyConfig”
猜你喜欢
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
相关资源
最近更新 更多