PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menambahkan objek dict ke postgresql

Jika versi PostgreSQL Anda cukup baru (9.4+) dan versi psycopg>=2.5.4 semua kunci adalah string dan nilai dapat direpresentasikan sebagai JSON, sebaiknya simpan ini ke dalam kolom JSONB. Kemudian, jika diperlukan, kolom akan dapat dicari juga. Cukup buat tabel sebagai

CREATE TABLE thetable (
    uuid TEXT,
    dict JSONB
);

(... dan tentu saja menambahkan indeks, kunci utama, dll sesuai kebutuhan...) Saat mengirim kamus ke PostgreSQL, Anda hanya perlu membungkusnya dengan Json adaptor; saat menerima dari PostgreSQL, nilai JSONB akan secara otomatis diubah menjadi kamus, sehingga penyisipan akan menjadi

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'})])

dan memilih akan sesederhana

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

Dengan JSONB, PostgreSQL dapat menyimpan nilai lebih efisien daripada hanya membuang kamus sebagai teks. Selain itu, dimungkinkan untuk melakukan kueri dengan data, misalnya cukup pilih beberapa bidang dari kolom JSONB:

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

atau Anda dapat menggunakannya dalam kueri jika diperlukan:

>>> 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:KUNCI ASING/ON DELETE CASCADE

  2. STRING_AGG() Fungsi di PostgreSQL

  3. Oracle ke PostgreSQL — Kursor dan Ekspresi Tabel Umum

  4. ST_DWithin mengambil parameter sebagai derajat , bukan meter , mengapa?

  5. Bagaimana menangani evolusi basis data Play Framework 2 dalam produksi