当前位置: 首页 > 面试题库 >

将dict对象添加到Postgresql

卓胜
2023-03-14
问题内容

所以我在Python3.5上使用psycopg2将一些数据插入到postgresql数据库中。我想做的是有两列是字符串,最后一列只是一个dict对象。我不需要搜索字典,只需能够将其从数据库中拉出并使用它即可。

因此例如:

uuid = "testName"
otherString = ""
dict = {'id':'122','name':'test','number':'444-444-4444'}

# add code here to store two strings and dict to postgresql

cur.execute('''SELECT dict FROM table where uuid = %s''', 'testName')
newDict = cur.fetchone()
print(newDict['number'])

这有可能吗,如果可以的话,我将如何去做呢?


问题答案:

如果您的PostgreSQL版本足够新(9.4+)并且psycopg版本> =
2.5.4,则所有键都是字符串,并且值可以表示为JSON,最好将其存储在JSONB列中。然后,如果需要,该列也将是可搜索的。只需创建表即可

CREATE TABLE thetable (
    uuid TEXT,
    dict JSONB
);

(…并根据需要自然地添加索引,主键等…)将字典发送到PostgreSQL时,您只需要用Json适配器包装它即可 ;从PostgreSQL接收时,JSONB值将自动转换为字典,因此插入将变为

from psycopg2.extras import Json, DictCursor

cur = conn.cursor(cursor_factory=DictCursor)

cur.execute('INSERT into thetable (uuid, dict) values (%s, %s)',
    ['testName', Json({'id':'122','name':'test','number':'444-444-4444'})])

然后选择就像

cur.execute('SELECT dict FROM thetable where uuid = %s', ['testName'])
row = cur.fetchone()
print(row['dict']) # its now a dictionary object with all the keys restored
print(row['dict']['number']) # the value of the number key

使用JSONB,PostgreSQL不仅可以将字典作为文本转储,而且可以更有效地存储值。此外,还可以对数据进行查询,例如,只需从JSONB列中选择一些字段即可:

>>> cur.execute("SELECT dict->>'id', dict->>'number' FROM thetable")
>>> cur.fetchone()
['122', '444-444-4444']

或者您可以根据需要在查询中使用它们:

>>> cur.execute("SELECT uuid FROM thetable WHERE dict->>'number' = %s',
    ['444-444-4444'])
>>> cur.fetchall()
[['testName', {'id': '122', 'name': 'test', 'number': '444-444-4444'}]]


 类似资料:
  • 问题内容: 如何将对象添加到数组(使用javascript或jquery)?例如,此代码有什么问题? 我想使用此代码在function1数组中保存许多对象,并调用function2在数组中使用该对象。 如何将对象保存在数组中? 如何将对象放入数组并将其保存到变量? 问题答案: 使用Array.push()将任何东西放入数组。 有关数组的更多信息 一次添加多个项目 将项目添加到数组的开头 将一个数组

  • 问题内容: 考虑以下代码示例: 从PHP 5.3开始,这将产生(类似)以下输出: 但是下面的代码: …仅发出错误: 为什么将这些属性“添加”到对象?请注意,它们没有定义为手册页DateTime`上的类的一部分。 问题答案: 发生了一些魔术,但这很简单。 DateTime类没有您要访问的公共变量“date”。但是,作为PHP工作方式的副作用,在该类上调用print_r或var_dump时会创建一个变

  • 问题内容: 这是我的对象文字: 我如何添加字段与对象? 问题答案: 有两种向对象添加新 属性的 方法: 使用点表示法: 使用方括号表示法: 当您知道属性名称时,将使用第一种形式。动态确定属性名称时,使用第二种形式。像这个例子: 甲 真实 JavaScript数组可使用任一构造: 数组文字符号: 数组构造器符号:

  • 问题内容: 我在使用Scala将字段添加到Play Framework中的Json对象时遇到问题: 我有一个包含数据的案例类。例如: 并且我能够使用Json Writes创建一个Json对象: 并且Json看起来像: 假设我想向Json对象添加一个附加的’c’字段。结果: 如何在不创建新案例类或使用Json.obj自己创建Json对象的情况下做到这一点?我正在寻找类似的东西: 任何帮助表示赞赏!

  • 问题内容: 我要返回一个Mongoose文档,并希望在发送之前向其中添加一些元数据。但是,我无法添加任何属性,我不确定为什么。我检查了它是否可以使用Object.isExtensible(doc)扩展。 可能是什么问题? 问题答案: 啊..我的对象是一个Mongoose文档,不允许添加属性。解决方案是将返回的文档转换为普通对象,或者在查询中调用lean()。

  • 问题内容: 我想向中添加一个对象,但是每次我向具有3个属性的新对象添加时,都会出现错误。 在这里,我正在尝试创建其对象并将其传递给的类。 问题答案: 创建对象时需要使用运算符 要不然 并且您的构造函数不应包含。否则它将成为您班上的一个方法。