PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dodawanie obiektu dict do postgresql

Jeśli twoja wersja PostgreSQL jest wystarczająco nowa (9.4+), a wersja psycopg jest>=2.5.4, wszystkie klucze są ciągami i wartościami mogą być reprezentowane jako JSON, najlepiej byłoby zapisać to w kolumnie JSONB. Wtedy, jeśli zajdzie taka potrzeba, kolumnę będzie można przeszukiwać. Po prostu utwórz tabelę jako

CREATE TABLE thetable (
    uuid TEXT,
    dict JSONB
);

(... i oczywiście dodaj indeksy, klucze podstawowe itp. w razie potrzeby...) Podczas wysyłania słownika do PostgreSQL wystarczy owinąć go za pomocą Json adapter; podczas odbierania z PostgreSQL wartość JSONB byłaby automatycznie konwertowana do słownika, dzięki czemu wstawianie stałoby się

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

a wybór byłby tak prosty jak

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

Dzięki JSONB PostgreSQL może przechowywać wartości wydajniej niż tylko zrzucanie słownika jako tekstu. Dodatkowo staje się możliwe wykonywanie zapytań z danymi, na przykład wystarczy wybrać niektóre pola z kolumny JSONB:

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

lub w razie potrzeby możesz ich użyć w zapytaniach:

>>> 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. Jak wykryć zapytanie blokujące blokadę w Postgresie?

  2. Jak zaktualizować wybrane wiersze wartościami z pliku CSV w Postgresie?

  3. Jak zminimalizować RPO dla baz danych PostgreSQL za pomocą odzyskiwania punktu w czasie?

  4. Zoptymalizuj zapytanie GROUP BY, aby pobrać ostatni wiersz na użytkownika

  5. Aktualizacje narzędzi testowych PostgreSQL z archiwum testów