Проблема обновления MongoDB с использованием Python / PyMon go с REST API - PullRequest
0 голосов
/ 16 февраля 2020

Здравствуйте. У меня проблемы с обновлением документа MongoDB при использовании Python REST API. Вот код Python:

import json
import bottle
from bson import json_util
from bson.json_util import dumps
from pymongo import MongoClient
from bottle import route, run, request, abort

connection = MongoClient('localhost', 27017)
db = connection['city']
collection = db['inspections']

#Create 
@route('/create', method='POST')
def post_create():

    data=json.load(request.body)
    id=data["id"]
    certificate_number=data["certificate_number"]   
    business_name=data["business_name"]
    date=data["date"]
    result=data["result"]
    sector=data["sector"]
    result=collection.insert_one({'id': id, 'certificate_number': certificate_number, 'business_name' : business_name, 'date' : date, 'result' : result, 'sector' : sector}).inserted_id
    return json.loads(json.dumps(result, indent=4, default=json_util.default))

#Update
@route('/update', method='GET')
def update():

    id=request.query.id
    result=request.query.result
    myquery = {"id": "10011-2017-TEST" }
    newvalues = { "$set": { "result" : result } }
    collection.update(myquery, newvalues)

После запуска вышеуказанного кода Python эти два запроса я выполняю на своем терминале:

#Create
curl -H "Content-Type: application/json" -X POST -d '{"id" : "10011-2017-TEST","certificate_number" : 9278833,"business_name" : "ACME TEST INC.","date" : "Feb 20 2017","result" : "No Violation Issued","sector" : "Test Retail Dealer - 101"}' http://localhost:8080/create

#Update
curl http://localhost:8080/update?id="10011-2017-TEST"&result="Violation Issued"

Первый команда curl работает отлично. Однако, когда я запускаю вторую команду обновления curl, я получаю пустой «результат».

{
        "_id" : ObjectId("5e48b39618882a084aa35b86"),
        "sector" : "Test Retail Dealer - 101",
        "certificate_number" : 9278833,
        "result" : "",
        "date" : "Feb 20 2017",
        "business_name" : "ACME TEST INC.",
        "id" : "10011-2017-TEST"
}

Мне нужно, чтобы «результат» изменился с «No Violation Issueed» на «Violation Issued». Я думаю, что я близок, потому что я знаю, что вторая команда обновления curl ссылается на правильный документ, однако не корректно обновляет «результат». Я подозреваю, что функция python не может видеть вторую часть запроса, что приводит к пустому обновлению.

1 Ответ

0 голосов
/ 16 февраля 2020

axme100 правильно, пробелы это ваша проблема. Есть несколько способов обойти это: различные кавычки / экранирование оболочки и т. Д. c. но, вероятно, самый простой:

curl 'http://localhost:8080/update?id=10011-2017-TEST&result=Violation%20Issued'

Помещайте все это в одинарные кавычки, когда в строке запроса есть &, чтобы предотвратить запуск оболочки в фоновом режиме.

...