首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用pyArango重命名集合

用pyArango重命名集合
EN

Stack Overflow用户
提问于 2018-07-16 12:49:58
回答 2查看 130关注 0票数 0

我试图使用ArangoDB重命名一个pyArango集合。到目前为止,这就是我所拥有的:

代码语言:javascript
复制
connection = pyArango.Connection('http://random-address', username='random-username', password='random-password')
test_db = Database(connection, 'test-db')
collection = test_db["new"]
collection.action("PUT", "rename", name="newname")

代码在第4行中失败:

{“错误”:真,‘代码’:400,'errorNum':1208,'errorMessage':'name必须是非空‘}

我可能不正确地使用action方法,但是文档没有提供任何示例。有谁有主意吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-30 11:58:58

我把它修好了:

代码语言:javascript
复制
def rename_collection(arango_uri, username, password, database, collection, new_name):
    url = '{}/_db/{}/_api/collection/{}/rename'.format(arango_uri, database, collection)
    params = {"name": new_name}
    response = requests.put(url, data=json.dumps(params), auth=HTTPBasicAuth(username, password))
    return response
票数 0
EN

Stack Overflow用户

发布于 2018-07-20 14:38:26

JSON对象{"name": "newname"}需要作为请求体传递。新名称不能作为URL路径参数传递。问题是collection.action()的实现

代码语言:javascript
复制
def action(self, method, action, **params) :
    "a generic fct for interacting everything that doesn't have an assigned fct"
    fct = getattr(self.connection.session, method.lower())
    r = fct(self.URL + "/" + action, params = params)
    return r.json()

关键字参数以称为params的dict结束。此对象作为命名参数fct()传递给请求函数params。此参数接收dict并将其转换为URL路径参数,例如服务器的HTTP不支持的?name=newname

不幸的是,无法通过action()传递有效负载。但是,您可以编写一些自定义代码:

代码语言:javascript
复制
from pyArango.connection import *
connection = Connection('http://localhost:8529', username='root', password='')

try:
    connection.createDatabase('test-db')
except CreationError:
    pass
test_db = Database(connection, 'test-db')

try:
    test_db.createCollection(name='new')
except CreationError:
    pass
collection = test_db['new']

r = connection.session.put(collection.URL + '/rename', data='{"name":"newname"}')
print(r.text)
collection = test_db['newname']

您还可以使用dict作为有效负载,并将其转换为JSON (如果需要的话):

代码语言:javascript
复制
import json
...put(..., data=json.dumps({"name": "newname"}))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51362259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档