Ich habe untersucht, wie man die für PostgreSQL typische Datenseite von Python verwendet, also werde ich sie aufzeichnen.
Hier geht es um den Typ jsonb.
Dieser Inhalt ist ein Auszug aus dem Inhalt der 51. Nagaoka IT Developer Study Group. Die Folie ist hier.
Die Java-Version ist hier.
Wenn Sie PostgreSQL aus einer Anwendung verwenden, verwenden Sie es über die DB-API. Die DB-API hat psycopg2 als eine der Implementierungen in der Spezifikation. psycopg2 verwendet intern libpq, die offizielle PostgreSQL C-Clientbibliothek.
https://github.com/civic/postgresql-python-json
id | info |
---|---|
1 | {"a": 100, "b": "Hello"} |
2 | {"a": 200, "b": "World"} |
CREATE TABLE json_test(
id integer,
info jsonb
)
SELECT
cur.execute(
"SELECT info FROM json_test WHERE id=1"
)
row = cur.fetchone()
print(row[0])
# {'b': 'Hello', 'a': 100}
Wenn Sie die JSON-Spalte erhalten, können Sie sie mit dict (Python-Wörterbuchtyp) abrufen.
INSERT (1)
from psycopg2.extras import Json
#Aktualisiert mit json Objekt
cur.execute(
"INSERT INTO json_test(info) VALUES(%s)",
[
Json({"a":30, "b": "update"})
]
)
Legen Sie die Parameter im Json-Objekt fest, das von psycopg2 bereitgestellt wird. Verwenden Sie psycopg2.extras.Json. diktieren → Json.
INSERT (2)
import json
#Konvertieren Sie dict in string und übergeben Sie es an SQL
cur.execute(
"INSERT INTO json_test(info) VALUES(jsonb(%s))",
[
json.dumps({"a":30, "b": "update"}) //dict→str
]
)
Ein Muster, das Parameter als JSON-Zeichenfolge festlegt und sie in einer SQL-Anweisung in jsonb umwandelt. In diesem Fall kann es in der DB-API-Schnittstelle verwendet werden.
SELECT / INSERT
from sqlalchemy.dialects.postgresql import JSONB
class JsonTest(Base):
__tablename__ = 'json_test'
id = Column(Integer, primary_key=True)
info = Column(JSONB) #Spalten und Deklarationen vom Typ JSONB
...
Für SQL Alchemy, das OR-Mapper-Funktionen bietet, kann der Postgresql-Dialekt für Spaltendefinitionen verwendet werden.
Recommended Posts