отправка списка в виде запросов POST - PullRequest
0 голосов
/ 28 мая 2020

С помощью python я пытаюсь отладить этот PHP код (который находится внутри множества другого кода, который загромождает вопрос)

$sql = rtrim("INSERT INTO someTable (foo, bar, id) VALUES " . str_repeat("(?, ?, $id)," , count($contents)), ',');

$stmt = $dbh->prepare($sql);

foreach ($contents as $i => $line) {

      $stmt->bindParam(2*$i+1, $line['foo'], PDO::PARAM_STR);
      $stmt->bindParam(2*$i+2, $line['bar'], PDO::PARAM_STR);


      echo $line['dutch'] . '->' . $line['english'] . '\n';

      if (!$stmt->execute()) {
        $dbh->rollBack();
        return false;
      }
}
$dbh->commit();
return true;

для этой отладки я сделал этот фрагмент кода

import requests
s = requests.Session()
content = [
{'foo': 'f', 'bar': 'b'},
{'foo': 'o', 'bar': 'a'},
{'foo': 'o', 'bar': 'r'}
]
s.post("http://localhost:8000", data={'content': content})

Который не смог добавить данные в мою базу данных

Итак, я попробовал небольшую отладку

print_r($_POST)

, которая вернула

Array
(
    [someOtherVariables] => otherValues
    [content] => foo
)

Я ожидал, что контент будет содержать массив объектов, но каким-то образом он содержит только имя первого индекса. Кто-нибудь знает, почему этот код python не отправляет полный список и как я могу изменить свой код, чтобы он работал?

Я также пробовал отправлять данные с json вместо переменной данных s.post("http://localhost:8000", json={'content': content}), но это, похоже, не решает мою проблему.

1 Ответ

1 голос
/ 28 мая 2020

Я думаю, что вам может потребоваться преобразовать ваш python dict в строку json, прежде чем отправлять его через запросы.

import json

# a Python object (dict):
x = {
  "name": "John",
  "age": 30,
  "city": "New York"
}

# convert into JSON:
y = json.dumps(x)

В вашем случае:

contentAsjsonString = json.dumps(content) 
s.post("http://localhost:8000", data={'content': contentAsjsonString })
...