如何在Django REST Framework中配置ArangoDB实现CRUD操作
Django REST Framework 集成 ArangoDB 配置与CRUD实现指南
1. 前置依赖安装
先安装所需的基础包:
- Django 与 DRF 基础环境,以及 Python 官方 ArangoDB 驱动,执行命令:
pip install django djangorestframework python-arango
*注意:安装前请确保本地已经完成 ArangoDB 服务端的安装与启动,默认服务端口为 8529。
2. Django 项目配置
Django 默认的关系型 ORM 不支持直接对接 ArangoDB,推荐保留 Django 默认数据库存储框架自带元数据(认证、会话、后台配置等),单独初始化 ArangoDB 客户端处理业务数据,配置方式如下:
- 在项目
settings.py文件中新增 ArangoDB 连接配置:
ARANGO_CONFIG = { "host": "127.0.0.1", "port": 8529, "username": "root", "password": "你的ArangoDB登录密码", "database": "自定义业务数据库名称" }
- 封装全局 ArangoDB 客户端,可在项目
utils目录下新建arango_client.py文件,写入如下内容:
from arango import ArangoClient from django.conf import settings # 初始化客户端 client = ArangoClient(hosts=f"http://{settings.ARANGO_CONFIG['host']}:{settings.ARANGO_CONFIG['port']}") # 连接数据库 db = client.db( settings.ARANGO_CONFIG['database'], username=settings.ARANGO_CONFIG['username'], password=settings.ARANGO_CONFIG['password'] ) # 快捷获取集合的方法 def get_collection(collection_name): if not db.has_collection(collection_name): db.create_collection(collection_name) return db.collection(collection_name)
3. 基础CRUD操作示例
直接调用封装好的客户端即可完成数据操作:
- 新增数据
from utils.arango_client import get_collection user_col = get_collection("users") # 插入单条文档 new_user = user_col.insert({"username": "test", "age": 25})
- 查询数据
# 按主键查询 user = user_col.get(new_user["_key"]) # 条件查询(AQL语句查询) cursor = db.aql.execute("FOR u IN users FILTER u.age > 20 RETURN u") user_list = [doc for doc in cursor]
- 更新数据
# 更新字段 user_col.update({"_key": new_user["_key"], "age": 26})
- 删除数据
user_col.delete(new_user["_key"])
4. DRF 适配方法
你可以直接使用 DRF 普通序列化器做参数校验和数据返回,无需使用 ModelSerializer:
# 序列化器示例 from rest_framework import serializers class UserSerializer(serializers.Serializer): _key = serializers.CharField(read_only=True) username = serializers.CharField(max_length=32) age = serializers.IntegerField(min_value=0) # 视图示例 from rest_framework.views import APIView from rest_framework.response import Response from utils.arango_client import get_collection class UserView(APIView): def get(self, request): user_col = get_collection("users") users = [doc for doc in user_col.all()] ser = UserSerializer(users, many=True) return Response(ser.data) def post(self, request): ser = UserSerializer(data=request.data) ser.is_valid(raise_exception=True) user_col = get_collection("users") res = user_col.insert(ser.validated_data) return Response({"_key": res["_key"]}, status=201)
注意事项
- ArangoDB 文档自带三个系统字段
_key、_id、_rev,序列化时可根据业务需要保留或过滤 - 事务操作可直接使用
python-arango提供的事务接口,无需适配 Django 自带事务机制 - 如需更贴近 Django 风格的 ORM 操作,可自行封装对应模型层,简化重复的CRUD操作
内容的提问来源于stack exchange,提问作者Ashutosh mishra
相关产品推荐
相关产品推荐

