sql >> Databáze >  >> RDS >> PostgreSQL

Přidání objektu dict do postgresql

Pokud je vaše verze PostgreSQL dostatečně nová (9.4+) a verze psycopg je>=2.5.4, všechny klíče jsou řetězce a hodnoty mohou být reprezentovány jako JSON, bylo by nejlepší uložit to do sloupce JSONB. V případě potřeby by pak bylo možné prohledávat i sloupec. Jednoduše vytvořte tabulku jako

CREATE TABLE thetable (
    uuid TEXT,
    dict JSONB
);

(...a přirozeně přidejte indexy, primární klíče atd. podle potřeby...)Při odesílání slovníku do PostgreSQL jej stačí zabalit do Json adaptér; při příjmu z PostgreSQL by se hodnota JSONB automaticky převedla do slovníku, takže vkládání by se stalo

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 výběr by byl stejně jednoduchý jako

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

S JSONB může PostgreSQL ukládat hodnoty efektivněji, než jen ukládat slovník jako text. Navíc je možné provádět dotazy s daty, například stačí vybrat některá pole ze sloupce JSONB:

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

nebo je můžete v případě potřeby použít v dotazech:

>>> 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. Vytvořte datum z roku a čísla týdne v MSSQL

  2. Vraťte název místního serveru v SQL Server s @@ SERVERNAME

  3. Funkce MySQL SQRT() – Vrátí druhou odmocninu čísla v MySQL

  4. Jak provést UPDATE Pass-Through Query v SQL Server