今回は、WebAPIでCloudantを使ってみます。
@app.route('/api/adduser', methods = ['POST'])
def AddUser():
if request.is_json:
if 'user' not in request.json:
user = ''
else:
user = str(request.json['user'])
client = Cloudant('d.....', 'a.....', url='https://d.....')
client.connect()
my_database = client['users']
if user not in my_database:
my_database.create_document({'_id' : user})
client.disconnect()
return jsonify(status = 'success')
else:
return jsonify(status = 'error')
{"user":"Taro"}というデータを2回送信したところ、1回目は登録され、2回目にエラーが発生しました。
requests.exceptions.HTTPError: 409 Client Error: Conflict conflict Document update conflict. for url:https://.....
デバッグ用コードを入れ、いろいろ試してみたところ、どうも存在チェックが正常に動作していないようです。
存在チェック前に全データを出力する処理を入れるとなぜだかうまくいきました。
@app.route('/api/adduser', methods = ['POST'])
def AddUser():
if request.is_json:
if 'user' not in request.json:
user = ''
else:
user = str(request.json['user'])
client = Cloudant('d.....', 'a.....', url='https://d.....')
client.connect()
my_database = client['users']
#########################################
# usersの全データを出力
for doc in my_database:
print(doc)
#########################################
if user not in my_database:
my_database.create_document({'_id' : user})
client.disconnect()
return jsonify(status = 'success')
else:
return jsonify(status = 'error')
使用したpython-cloudantのバージョンは2.3.1でした。
どうやらpython-cloudantのバグのようで、少なくとも2.9.0ではこの問題は修正されていました。
またいつか、どこかで。
これは中々濃い内容
返信削除めっちゃcloudant使って見たくなる記事でした
返信削除