10.pythonのDB -Neo4j-
◼︎neo4j
グラフ構造を持ったデータの保存、探索、集計に最適化されたデータベースです。
◼︎◼︎Docker
FROM neo4j
◼︎◼︎docker-compose.yml
NEO4J_AUTHをnoneとすることで、ログイン時に認証を求めなくなります。
開発だけの時は、利用した方が便利かも。
version: '3'
services:
neo4j_datavolume:
image: busybox
volumes:
- /data/dbms
neo4j_core1:
build: .
ports:
- 7473:7473
- 7474:7474
- 6477:6477
- 7687:7687
volumes_from:
# busyboxでデータの永続化を行う
- neo4j_datavolume
# environment:
# - NEO4J_AUTH=none
# - NEO4J_AUTH=neo4j/changeme
# - NEO4J_dbms_mode=CORE
# - NEO4J_causalClustering_expectedCoreClusterSize=3
# - NEO4J_causalClustering_initialDiscoveryMembers=neo4j_core1:5000
# - NEO4J_dbms_connector_http_listen__address=:7474
# - NEO4J_dbms_connector_https_listen__address=:6477
# - NEO4J_dbms_connector_bolt_listen__address=:7687
◼︎◼︎python
from neo4j.v1 import GraphDatabase
# api形式で利用する際は、boltでアクセス先を指定する。今回はauthを利用するのでauthも記載する。passwordは事前にbrowserからアクセスして変更する。
driver = GraphDatabase.driver('bolt://localhost:7687', auth=('neo4j', 'passsword'))
def clearDb(tx):
tx.run('MATCH (n) DETACH DELETE n')
def addFriend(tx, name, friendName=None):
if not friendName:
return tx.run('CREATE (p:Person {name: $name}) RETURN p', name=name)
return tx.run('MATCH (p:Person {name: $name}) CREATE (p)-[:FRIEND]->(:Person {name: $friend_name})', name=name, friend_name=friendName)
def printFriend(tx, name):
for record in tx.run('MATCH (p {name: $name}) - [:FRIEND] -> (yourFriends) RETURN p,yourFriends', name=name):
print(record)
with driver.session() as session:
# 実行前に全削除
session.write_transaction(clearDb)
# Tomを追加(友人なし)
session.write_transaction(addFriend, 'Tom')
# Tomを追加(友人あり)
for f in ['Sum', 'Nancy']:
session.write_transaction(addFriend, 'Tom', f)
'''
<Record p=<Node id=0 labels={'Person'} properties={'name': 'Tom'}> yourFriends=<Node id=20 labels={'Person'} properties={'name': 'Nancy'}>>
<Record p=<Node id=0 labels={'Person'} properties={'name': 'Tom'}> yourFriends=<Node id=1 labels={'Person'} properties={'name': 'Sum'}>>
'''
session.read_transaction(printFriend, 'Tom')
◼︎◼︎neo4jのグラフ
この記事が気に入ったらサポートをしてみませんか?