我最近开始得到这个错误,当我调试我的python函数应用程序:(BadRequest) Message: {"Errors":["One of the specified inputs is invalid"]}
功能应用程序非常好地为我的同事,他们没有得到这个错误。当我试图访问azure cosmos数据库时,出现错误。
示例
item = { "firstname": "John", "lastname": "Doe"}
container.upsert_item(item)
问题似乎是插入到数据库中缺少"id"字段。如果我在调用upsert_item(item)之前将这个字段添加到项目中,它会正确工作。
为什么我最初不需要这样做(同事不需要),我改变了什么设置来阻止它自动添加id字段?
我使用visual studio代码,在python编码,安装了azure工具扩展。我试过从磁盘上删除代码并重新克隆它,删除所有扩展并重新安装它们,我甚至完全卸载了visual studio代码。
编辑
增加了容器属性
Container properties {'id': 'person', 'indexingPolicy': {'indexingMode': 'consistent', 'automatic': True, 'includedPaths': [{'path': '/*'}], 'excludedPaths': [{'path': '/"_etag"/?'}]}, 'partitionKey': {'paths': ['/lastname'], 'kind': 'Hash'}, 'uniqueKeyPolicy': {'uniqueKeys': []}, 'conflictResolutionPolicy': {'mode': 'LastWriterWins', 'conflictResolutionPath': '/_ts', 'conflictResolutionProcedure': ''}, 'geospatialConfig': {'type': 'Geography'}, 'analyticalStorageTtl': -1, '_rid': 'O-pDAPQSY5Y=', '_ts': 1654191756, '_self': 'dbs/O-pDAA==/colls/O-pDAPQSY5Y=/', '_etag': '"00003b31-0000-0100-0000-6298f68c0000"', '_docs': 'docs/', '_sprocs': 'sprocs/', '_triggers': 'triggers/', '_udfs': 'udfs/', '_conflicts': 'conflicts/'}
找到了我的问题的答案。我已经将azure cosmos db全局更新到最新版本(4.3.0)(这就是为什么它只影响到我,应该把它放在requirements.txt中),它不允许自动创建id
s。
在upsert_item(...)
函数中有一个单行变化(从4.2.0到4.3.0),当您查看代码墙时很难发现(措辞非常相似)。
Azure-Cosmos-4.3.0 github链接到行
这一行是硬编码的。我不明白为什么他们决定阻止用户自动生成id
s。
如果人们还在寻找这个:您现在可以将enable_automatic_id_generation
标志添加到create_item
方法中。
的例子:
result = container.create_item(
{
"data": "hello world",
},
enable_automatic_id_generation=True,
)