ArangoDB 学习笔记(三)

使用Python操作ArangoDB

参考:(1)Python连接操作图数据库arangodb教程_测试小白白的学习之路的博客-优快云博客_arangodb图数据库

(2)ArangoDB教程: Python 10分钟 - ArangoDB

 1. 安装pyarango库

pip install pyarango

2. 导入pyarango

from pyArango.connection import *

3. 创建连接

conn_URL = 'http://localhost:8529'  
#安装arangodb完成后,在浏览器输入localhost:8529就可以进入到arangodb的前端页面,arangodb一般的默认端口都是8529
username = 'root'
passwd = ''

conn = Connection(arangoURL=conn_URL, username=username, password=passwd)
print('conn: %s' % conn) #感兴趣的小伙伴可以查看一下这个连接显示的到底是个啥

4. 创建数据库

database_name = 'my_db'
#判断是否有该数据库,如果没有就创建该数据库,如果有就直接连接
if not conn.hasDatabase(database_name):
    conn.createDatabase(name=database_name)
    
db = conn[database_name]
print('db: %s' % db)

5. 创建集合

我理解的arangodb数据库的collection就是表,分为点表(document)和边表(edge),但本次教程中默认创建的是document。

collection_name = 'users'

if not db.hasCollection(collection_name):
    db.createCollection(name=collection_name)
    
collection = db[collection_name]
print('collection: %s' % collection)

6. 插入文档数据 

插入数据有两种方法:
一种是用.save()方法添加,
另一种使用aql语句进行添加

.save()方法插入文档数据:

利用for循环批量插入

print('插入之前的数据量: %s' % collection.count())
for i in range(0,10):
     user = {
         'name' : 'user_' + str(i),
         'age' : 20 + i,
         'address' : {
             'home' : 'home address',
             'office' : 'office address'
         }
     }
     collection.createDocument(user).save()
print('插入之后的数据量: %s' % collection.count())

aql语句插入数据

rowlist = {
'name': 'user_',
    'age' : 20,
    'address': {
        'home': 'home address',
        'office' : 'office address'
    }
}
bind = {"rowlist": rowlist, "@collection":collection_name}
aql = 'INSERT @rowlist into @@collection'
result = db.AQLQuery(aql, bindVars=bind)

bindVars表示的是绑定参数。

绑定参数的语法是@+参数名称
存在一种特殊类型的绑定参数用于注入集合名称。这种类型的绑定参数有一个以附加@符号为前缀的名称(因此在查询中使用绑定参数时,必须使用两个@符号)。


“@collection”:collection_name表示的是插入到变量collection_name中存入的集合

笔者目前还没有找到像.save()方法批量插入不重复的方法,对aql也没那么精通。

7. 查询文档

(1)分页查询

query = collection.fetchAll(skip=5, limit=2)
for doc in query:
    print(doc)

(2)按条件查询

query = collection.fetchByExample({'name':'user_5'}, batchSize=10, count=True)
for doc in query:
    print(doc)

(3)使用aql查询

print('query by AQL ...   使用aql查询文档')
aql = "FOR user IN users FILTER user.name == @name || user.age < 25 LIMIT 5 RETURN user"
bindVars = {'name' : 'user_0'}
query = db.AQLQuery(aql, rawResults=True ,batchSize=1, bindVars=bindVars)
doc = []
for i in query:
    doc.append(i)
    print(i)
print('total ' + str(len(doc)) + ' elements')

查询后会显示结果,因为之前测试的时候需要看查询结果有多少条,找了关于db.AQLQuery的资料,但是没有找到,我就想了一个方法,把结果方法doc的列表中,然后统计列表中的元素个数,就是我想要的查询的结果数。目前看还是可以的,如果有更好的方法欢迎告诉我哈。

(4)删除文档

删除文档有两种方法,这里只是删除文档,没有把集合删除,相当于清空集合。
一种是用.delete方法删除
另一种是通过aql删除文档

.delete方法 

#为了增加可读性,在删除前后都添加打印document条数
print('collection count before delete: %s' % collection.count())
query = collection.fetchAll()
for doc in query:
    doc.delete()
print('collection count after delete: %s' % collection.count())

这个是逐条删除document,所以时间可能会有点长,但也没有长到无法接收的地步,删除的时间还是和数据量有关。

aql方法

bind = {"@collection": collection_name}
aql = 'for i in @@collection remove i in @@collection'
result = db.AQLQuery(aql, bindVars=bind)

(5)删除集合 

collection.delete()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值