J'ai étudié comment utiliser le côté données propre à PostgreSQL à partir de Python, je vais donc l'enregistrer.
Il s'agit du type jsonb.
Ce contenu est un extrait du contenu présenté au 51e Nagaoka IT Developer Study Group. La diapositive est ici.
La version Java est ici.
Lorsque vous utilisez PostgreSQL à partir d'une application, utilisez-le via l'API DB. L'API DB a psycopg2 comme l'une des implémentations de la spécification. psycopg2 utilise en interne libpq, la bibliothèque client officielle de PostgreSQL C.
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}
Si vous obtenez la colonne json, vous pouvez l'obtenir avec dict (type de dictionnaire Python).
INSERT (1)
from psycopg2.extras import Json
#Mis à jour avec un objet json
cur.execute(
"INSERT INTO json_test(info) VALUES(%s)",
[
Json({"a":30, "b": "update"})
]
)
Définissez les paramètres dans l'objet Json fourni par psycopg2. Utilisez psycopg2.extras.Json. dict → Json.
INSERT (2)
import json
#Convertir dict en chaîne et le transmettre à SQL
cur.execute(
"INSERT INTO json_test(info) VALUES(jsonb(%s))",
[
json.dumps({"a":30, "b": "update"}) //dict→str
]
)
Un modèle qui définit les paramètres sous forme de chaîne JSON et les convertit en jsonb dans une instruction SQL. Dans ce cas, il peut être utilisé dans l'interface de l'API DB.
SELECT / INSERT
from sqlalchemy.dialects.postgresql import JSONB
class JsonTest(Base):
__tablename__ = 'json_test'
id = Column(Integer, primary_key=True)
info = Column(JSONB) #Colonnes et déclarations de type JSONB
...
Pour SQL Alchemy, qui fournit la fonctionnalité de mappeur OR, le dialecte postgresql peut être utilisé pour les définitions de colonne.
Recommended Posts