PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Добавяне на dict обект към postgresql

Ако вашата версия на 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'}]]


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете колони с конкретни имена на колони в PostgreSQL

  2. Разлика между текст и varchar (променлив символ)

  3. PostgreSQL пул на връзки с PgBouncer

  4. Как да отпечатате резултата от PostgreSQL заявка във формат CSV или TSV от командния ред?

  5. Функция MAX() в PostgreSQL