动态设置集合时出错
Error when set collection dynamically
Blow 代码是对 :https://www.arangodb.com/tutorials/tutorial-python/
的微小修改
doc = {"_key": 'some_nice_key', "name": 'Robert', "age": '56'}
bindVars = {"doc": doc,"collection":"test"}
aql = "INSERT @doc INTO @collection LET newDoc = NEW RETURN newDoc"
queryResult = db.AQLQuery(aql, bindVars = bindVars)
,我刚刚做了一些修改:
{"doc": doc} -> {"doc": doc,"collection":"test"}
INSERT @doc INTO users... -> INSERT @doc INTO @collection...
它给我错误:
bind parameter 'bind parameter 'collection' has an invalid value or type near '@collection LET newDoc = NEW RET...' at position 1:18' has an invalid value or type (while parsing). Errors: {u'code': 400, u'errorNum': 1553, u'errorMessage': u"bind parameter 'bind parameter 'collection' has an invalid value or type near '@collection LET newDoc = NEW RET...' at position 1:18' has an invalid value or type (while parsing)", u'error': True}
aql 不支持动态集合还是我犯了什么错误?
AQL 支持注入集合名称。但这是一个特殊情况,您必须使用额外的 @
作为前缀。
https://docs.arangodb.com/3.0/AQL/Fundamentals/BindParameters.html
通过此修改,您的代码应该可以工作:
doc = {"_key": 'some_nice_key', "name": 'Robert', "age": '56'}
bindVars = {"doc": doc,"@collection":"test"}
aql = "INSERT @doc INTO @@collection LET newDoc = NEW RETURN newDoc"
queryResult = db.AQLQuery(aql, bindVars = bindVars)
Blow 代码是对 :https://www.arangodb.com/tutorials/tutorial-python/
的微小修改doc = {"_key": 'some_nice_key', "name": 'Robert', "age": '56'}
bindVars = {"doc": doc,"collection":"test"}
aql = "INSERT @doc INTO @collection LET newDoc = NEW RETURN newDoc"
queryResult = db.AQLQuery(aql, bindVars = bindVars)
,我刚刚做了一些修改:
{"doc": doc} -> {"doc": doc,"collection":"test"}
INSERT @doc INTO users... -> INSERT @doc INTO @collection...
它给我错误:
bind parameter 'bind parameter 'collection' has an invalid value or type near '@collection LET newDoc = NEW RET...' at position 1:18' has an invalid value or type (while parsing). Errors: {u'code': 400, u'errorNum': 1553, u'errorMessage': u"bind parameter 'bind parameter 'collection' has an invalid value or type near '@collection LET newDoc = NEW RET...' at position 1:18' has an invalid value or type (while parsing)", u'error': True}
aql 不支持动态集合还是我犯了什么错误?
AQL 支持注入集合名称。但这是一个特殊情况,您必须使用额外的 @
作为前缀。
https://docs.arangodb.com/3.0/AQL/Fundamentals/BindParameters.html
通过此修改,您的代码应该可以工作:
doc = {"_key": 'some_nice_key', "name": 'Robert', "age": '56'}
bindVars = {"doc": doc,"@collection":"test"}
aql = "INSERT @doc INTO @@collection LET newDoc = NEW RETURN newDoc"
queryResult = db.AQLQuery(aql, bindVars = bindVars)