Cette section présente des méthodes sur un objet Connection
pour insérer des nodes et des edges dans le graph ou supprimer des nodes et des edges du graphset.
Chaque exemple se concentre uniquement sur l'utilisation de la méthode. Pour un exemple complet de code, veuillez vous référer à l'exemple complet.
Modèle de Données de Graph Exemple
Les exemples ci-dessous démontrent comment insérer ou supprimer des nodes ou edges d'un graphset avec les définitions de schema et de property suivantes :
Mappage des Types de Property
Lorsque vous insérez des nodes ou edges, vous devrez peut-être spécifier des valeurs de property de différents types. Le mappage entre les types de properties Ultipa et les types de données Python/Driver est le suivant :
Type de Property Ultipa | Type Python/Driver |
---|---|
int32 | int |
uint32 | int |
int64 | int |
uint64 | int |
float | float |
double | float |
decimal | float |
string | str |
text | str |
datetime | str [1] |
timestamp | str [1], int |
point | str |
blob | bytes |
list | list |
set | set |
[1] Les formats de chaînes de date pris en charge lors de l'insertion par lot incluent [AA]AA-MM-DD HH:MM:SS
, [AA]AA-MM-DD HH:MM:SSZ
, [AA]AA-MM-DDTHH:MM:SSZ
, [AA]AA-MM-DDTHH:MM:SSXX
, [AA]AA-MM-DDTHH:MM:SSXXX
, [AA]AA-MM-DD HH:MM:SS.SSS
et leurs variations.
Insertion
insertNodes()
Insère de nouveaux nodes d'un schema dans le graph actuel.
Paramètres :
List[Node]
: La liste des objetsNode
à insérer.str
: Nom du schema.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
ResponseInsertNode
: Résultat de la requête. L'objetResponseInsertNode
contient un aliasnodes
qui contient tous les nodes insérés lorsqueInsertRequestConfig.silent
est réglé sur faux.
# Insère deux nodes dans le schema 'user' dans le graphset 'lcc', imprime le code d'erreur et les informations des nodes insérés
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
nodes = [
Node(uuid=1, id="U001", values={
"name": "Alice",
"age": 18,
"score": 65.32,
"birthday": "1993-5-4",
"location": "point({latitude: 132.1, longitude: -1.5})",
"profile": "castToRaw(abc)",
"interests": ["tennis", "violin"],
"permissionCodes": [2004, 3025, 1025]
}),
Node(uuid=2, id="U002", values={
"name": "Bob"
})
]
response = Conn.insertNodes(nodes, "user", insertRequestConfig)
print(response.status.code)
# Il n'y a pas d'alias dans ResponseInsertNode si InsertRequestConfig.silent est vrai
insertedNodes = response.alias("nodes").asNodes()
for insertedNode in insertedNodes:
print(insertedNode.toJSON())
0
{"id": "U001", "schema": "user", "uuid": 1, "values": {"age": 18, "birthday": "1993-05-04 00:00:00", "interests": ["tennis", "violin"], "location": "POINT(132.100000 -1.500000)", "name": "Alice", "permissionCodes": [3025, 2004, 1025], "profile": [99, 97, 115, 116, 84, 111, 82, 97, 119, 40, 97, 98, 99, 41], "score": "65.3200000000"}}
{"id": "U002", "schema": "user", "uuid": 2, "values": {"age": null, "birthday": null, "interests": null, "location": null, "name": "Bob", "permissionCodes": null, "profile": null, "score": null}}
insertEdges()
Insère de nouveaux edges d'un schema dans le graph actuel.
Paramètres :
List[Edge]
: La liste des objetsEdge
à insérer.str
: Nom du schema.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
ResponseInsertEdge
: Résultat de la requête. L'objetResponseInsertEdge
contient un aliasedges
qui contient tous les edges insérés lorsqueInsertRequestConfig.silent
est réglé sur faux.
# Insère deux edges dans le schema 'follows' dans le graphset 'lcc', imprime le code d'erreur et les informations des edges insérés
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
edges = [
Edge(uuid=1, from_id="U001", to_id="U002", values={"createdOn": "2024-5-6"}),
Edge(uuid=2, from_id="U002", to_id="U001", values={"createdOn": 1715169600})
]
response = Conn.insertEdges(edges, "follows", insertRequestConfig)
print(response.status.code)
# Il n'y a pas d'alias dans ResponseInsertEdge si InsertRequestConfig.silent est vrai
insertedEdges = response.alias("edges").asEdges()
for insertedEdge in insertedEdges:
print(insertedEdge.toJSON())
0
{"from_id": "U001", "from_uuid": 1, "schema": "follows", "to_id": "U002", "to_uuid": 2, "uuid": 1, "values": {"createdOn": 1714924800}}
{"from_id": "U002", "from_uuid": 2, "schema": "follows", "to_id": "U001", "to_uuid": 1, "uuid": 2, "values": {"createdOn": 1715169600}}
insertNodesBatchBySchema()
Insère de nouveaux nodes d'un schema dans le graph actuel via gRPC. Les properties au sein des valeurs des nodes doivent être cohérentes avec celles déclarées dans la structure du schema.
Paramètres :
Schema
: Le schema cible.List[Node]
: La liste des objetsNode
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
InsertResponse
: Résultat de la requête.InsertResponse.data.uuids
contient les UUIDs des nodes insérés lorsqueInsertRequestConfig.silent
est réglé sur faux.
# Insère deux nodes dans le schema 'user' dans le graphset 'lcc', imprime le code d'erreur et les UUIDs des nodes insérés
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
schema = Schema(
name="user",
dbType=DBType.DBNODE,
properties=[
Property(name="name", type=PropertyType.PROPERTY_STRING),
Property(name="age", type=PropertyType.PROPERTY_INT32),
Property(name="score", type=PropertyType.PROPERTY_DECIMAL),
Property(name="birthday", type=PropertyType.PROPERTY_DATETIME),
Property(name="location", type=PropertyType.PROPERTY_POINT),
Property(name="profile", type=PropertyType.PROPERTY_BLOB),
Property(name="interests", type=PropertyType.PROPERTY_LIST, subTypes=[PropertyType.PROPERTY_STRING]),
Property(name="permissionCodes", type=PropertyType.PROPERTY_SET, subTypes=[PropertyType.PROPERTY_INT32])
]
)
nodes = [
Node(uuid=1, id="U001", values={
"name": "Alice",
"age": 18,
"score": 65.32,
"birthday": "1993-5-4",
"location": "point({latitude: 132.1, longitude: -1.5})",
"profile": b"abc",
"interests": ["tennis", "violin"],
"permissionCodes": {2004, 3025, 1025}
}),
Node(uuid=2, id="U002", values={
"name": "Bob",
"age": None,
"score": None,
"birthday": None,
"location": None,
"profile": None,
"interests": None,
"permissionCodes": None
})
]
response = Conn.insertNodesBatchBySchema(schema, nodes, insertRequestConfig)
print(response.status.code)
# InsertResponse.data.uuids est vide si InsertRequestConfig.silent est vrai
print(response.data.uuids)
0
[1, 2]
insertEdgesBatchBySchema()
Insère de nouveaux edges d'un schema dans le graph actuel via gRPC. Les properties au sein des valeurs des edges doivent être cohérentes avec celles déclarées dans la structure du schema.
Paramètres :
Schema
: Le schema cible.List[Edge]
: La liste des objetsEdge
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
InsertResponse
: Résultat de la requête.InsertResponse.data.uuids
contient les UUIDs des edges insérés lorsqueInsertRequestConfig.silent
est réglé sur faux.
# Insère deux edges dans le schema 'follows' dans le graphset 'lcc', imprime le code d'erreur et les UUIDs des edges insérés
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
schema = Schema(
name="follows",
dbType=DBType.DBEDGE,
properties=[
Property(name="createdOn", type=PropertyType.PROPERTY_TIMESTAMP)
]
)
edges = [
Edge(uuid=1, from_id="U001", to_id="U002", values={"createdOn": "2024-05-06"}),
Edge(uuid=2, from_id="U002", to_id="U001", values={"createdOn": None}),
]
response = Conn.insertEdgesBatchBySchema(schema, edges, insertRequestConfig)
print(response.status.code)
# InsertResponse.data.uuids est vide si InsertRequestConfig.silent est vrai
print(response.data.uuids)
0
[1,2]
insertNodesBatchAuto()
Insère de nouveaux nodes d'un ou plusieurs schemas dans le graph actuel via gRPC. Les properties dans les valeurs des nodes doivent être cohérentes avec celles définies dans la structure du schema correspondant.
Paramètres :
List[Node]
: La liste des objetsNode
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
ResponseBatchAutoInsert
: Résultat de la requête.ResponseBatchAutoInsert.data.uuids
contient le rapport d'insertion lorsqueInsertRequestConfig.silent
est réglé sur faux.
# Insère deux nodes dans le schema 'user' et un node dans le schema `product` dans le graphset 'lcc', imprime le code d'erreur et la réponse d'insertion
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
nodes = [
Node(schema="user", uuid=1, id="U001", values={
"name": "Alice",
"age": 18,
"score": 65.32,
"birthday": "1993-5-4",
"location": "point({latitude: 132.1, longitude: -1.5})",
"profile": b"abc",
"interests": ["tennis", "violin"],
"permissionCodes": {2004, 3025, 1025}
}),
Node(schema="user", uuid=2, id="U002", values={
"name": "Bob",
"age": None,
"score": None,
"birthday": None,
"location": None,
"profile": None,
"interests": None,
"permissionCodes": None
}),
Node(schema="product", uuid=3, id="P001", values={
"name": "Wireless Earbud",
"price": 93.2
})
]
response = Conn.insertNodesBatchAuto(nodes, insertRequestConfig)
print(response.status.code)
# Response.data.uuids est vide si InsertRequestConfig.silent est vrai
print(response.data.uuids)
0
[1, 2, 3]
insertEdgesBatchAuto()
Insère de nouveaux edges d'un ou plusieurs schemas dans le graph actuel via gRPC. Les properties dans les valeurs des edges doivent être cohérentes avec celles définies dans la structure du schema correspondant.
Paramètres :
List[Edge]
: La liste des objetsEdge
à insérer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
ResponseBatchAutoInsert
: Résultat de la requête.ResponseBatchAutoInsert.data.uuids
contient le rapport d'insertion lorsqueInsertRequestConfig.silent
est réglé sur faux.
# Insère deux edges dans le schema 'follows' et un edge dans le schema 'purchased' dans le graphset 'lcc', imprime le code d'erreur et la réponse d'insertion
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
edges = [
Edge(schema="follows", uuid=1, from_id="U001", to_id="U002", values={"createdOn": "2024-05-06"}),
Edge(schema="follows", uuid=2, from_id="U002", to_id="U001", values={"createdOn": 1715169600}),
Edge(schema="purchased", uuid=3, from_id="U002", to_id="P001", values={"qty": 1})
]
response = Conn.insertEdgesBatchAuto(edges, insertRequestConfig)
print(response.status.code)
# Response.data.uuids est vide si InsertRequestConfig.silent est vrai
print(response.data.uuids)
0
[1, 2, 3]
Suppression
deleteNodes()
Supprime les nodes qui répondent aux conditions données du graph actuel. Il est important de noter que la suppression d'un node entraîne la suppression de tous les edges qui y sont connectés.
Paramètres :
str
: La condition de filtrage pour spécifier les nodes à supprimer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
ResponseDeleteNode
: Résultat de la requête. L'objetResponseDeleteNode
contient un aliasnodes
qui contient tous les nodes supprimés lorsqueInsertRequestConfig.silent
est réglé sur faux.
# Supprime un @user node dont le nom est 'Alice' du graphset 'lcc', imprime le code d'erreur et les informations des nodes supprimés
# Tous les edges attachés au node supprimé sont également supprimés
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
response = Conn.deleteNodes("{@user.name == 'Alice'}", insertRequestConfig)
print(response.status.code)
# Il n'y a pas d'alias dans ResponseDeleteNode si InsertRequestConfig.silent est vrai
deletedNodes = response.alias("nodes").asNodes()
for deletedNode in deletedNodes:
print(deletedNode.toJSON())
0
{"id": "U001", "schema": "user", "uuid": 1, "values": {"name": "Alice"}}
deleteEdges()
Supprime les edges qui répondent aux conditions données du graph actuel.
Paramètres :
str
: La condition de filtrage pour spécifier les edges à supprimer.InsertRequestConfig
(Optionnel) : Paramètres de configuration pour la requête.
Retourne :
ResponseDeleteEdge
: Résultat de la requête. L'objetResponseDeleteEdge
contient un aliasedges
qui contient tous les edges supprimés lorsqueInsertRequestConfig.silent
est réglé sur faux.
# Supprime tous les @purchased edges du graphset 'lcc', imprime le code d'erreur et les informations des edges supprimés
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
response = Conn.deleteEdges("{@purchased}", insertRequestConfig)
print(response.status.code)
# Il n'y a pas d'alias dans ResponseDeleteEdge si InsertRequestConfig.silent est vrai
deletedEdges = response.alias("edges").asEdges()
for deletedEdge in deletedEdges:
print(deletedEdge.toJSON())
0
{"from_id": "U002", "from_uuid": 2, "schema": "purchased", "to_id": "P001", "to_uuid": 3, "uuid": 3, "values": {}}
Exemple Complet
from ultipa.configuration.InsertRequestConfig import InsertRequestConfig
from ultipa import Connection, UltipaConfig, Node
from ultipa.structs import InsertType
ultipaConfig = UltipaConfig()
# URI example: ultipaConfig.hosts = ["mqj4zouys.us-east-1.cloud.ultipa.com:60010"]
ultipaConfig.hosts = ["192.168.1.85:60061", "192.168.1.87:60061", "192.168.1.88:60061"]
ultipaConfig.username = "<username>"
ultipaConfig.password = "<password>"
Conn = Connection.NewConnection(defaultConfig=ultipaConfig)
# Paramètres de requêtes
insertRequestConfig = InsertRequestConfig(
insertType=InsertType.NORMAL,
graphName="lcc",
silent=False
)
# Insère deux nodes dans le schema 'user' et un node dans le schema `product` dans le graphset 'lcc', imprime le code d'erreur et la réponse d'insertion
nodes = [
Node(schema="user", uuid=1, id="U001", values={
"name": "Alice",
"age": 18,
"score": 65.32,
"birthday": "1993-5-4",
"location": "point({latitude: 132.1, longitude: -1.5})",
"profile": b"abc",
"interests": ["tennis", "violin"],
"permissionCodes": {2004, 3025, 1025}
}),
Node(schema="user", uuid=2, id="U002", values={
"name": "Bob",
"age": None,
"score": None,
"birthday": None,
"location": None,
"profile": None,
"interests": None,
"permissionCodes": None
}),
Node(schema="product", uuid=3, id="P001", values={
"name": "Wireless Earbud",
"price": 93.2
})
]
response = Conn.insertNodesBatchAuto(nodes, insertRequestConfig)
print(response.status.code)
# Response.data.uuids est vide si InsertRequestConfig.silent est vrai
print(response.data.uuids)