Python连接操作图数据库arangodb教程

最近在做arango数据库的压测,因为是个测试小白白,在开始测试之前因为没了解过arangodb,所以前期疯狂的找各种资料,然后各种尝试。(在查资料的过程中网上关于arangodb测试的资料非常少,后续我会持续分享我找到的arangodb的相关资料)目前本人的编程能力还是处于初学阶段(东学一下,西学一下),和大家一起进步

开始前的絮絮叨叨:觉得对于大脑来说,光有输入没有输出的话也是不行的,这也是我下定决心开始写文章的原因,对于写文章我也纠结了好久,不知道要写什么,最后还是决定拿最近的工作开始入手,把自己在找资料,学习的一些心得一并写出来,正好对最近工作来一个总结。

絮絮叨叨的纪念一下第一篇文章。\(^o^)/~



安装pyarango库


首先需要安装Python驱动arangodb的驱动程序——pyarango。 我用的是Python`3.8`,arangodb是`3.2.3`。
pip install pyarango

导入pyarango

from pyArango.connection import *

创建连接

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) #感兴趣的小伙伴可以查看一下这个连接显示的到底是个啥

创建数据库

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

创建集合

我理解的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)

插入文档数据

插入数据有两种方法:
一种是用.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也没那么精通,如果哪位大佬有方法欢迎留言告诉我,大家一起学习。

查询文档

分页查询

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

按条件查询

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

使用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的列表中,然后统计列表中的元素个数,就是我想要的查询的结果数。目前看还是可以的,如果有更好的方法欢迎告诉我哈。

删除

删除文档

删除文档有两种方法,这里只是删除文档,没有把集合删除,相当于清空集合。
一种是用.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)

删除集合

collection.delete()


总结

  1. 其实有的时候直接看官方文档真的很管用,官方文档有解释和示例,看完虽然到不了精通,但是入门肯定是够了。
  2. 一定一定要自己手敲一遍代码,这样既能练习手感,也能加深印象。


参考文献

pyaranog官方文档介绍
arangodb官方Python操作教程

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值