Получение ошибки как: Ожидаемое значение: строка 1, столбец 1 (символ 0) при попытке получить данные с помощью запросов - PullRequest
0 голосов
/ 28 мая 2020

У меня есть следующий код:

count_query="SELECT COUNT(*) FROM EMPLOYEE"
headers= {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer'+' '+token}

data = {"query":count_query}

url='https:....................'
try:
    response = requests.post(url, headers=headers, data=data)
    print(response.json) 
    print(response.status_code) 

except Exception as e:
    print(e)

Он дает ошибку как

Expecting value: line 1 column 1 (char 0)

Но когда я заменяю значение данных как

data = '{"query":"SELECT COUNT(*) FROM EMPLOYEE"}'

Его работает нормально, и я получаю правильный ответ. Но проблема в том, что я не могу жестко запрограммировать один запрос. Я должен использовать несколько запросов, которые я должен oop через Excel.

Может ли кто-нибудь помочь с этим.

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете отправлять сообщения на https://httpbin.org/post, и он вернет страницу с описанием полученных данных. В вашем первом случае он показал, что отправленные данные были

"data": "query=SELECT+COUNT%28%2A%29+FROM+EMPLOYEE"

, а во втором -

"data": "{\"query\":\"SELECT COUNT(*) FROM EMPLOYEE\"}"

Разница в том, что в первом случае data был закодирован а второй (после учета дополнительных экранирований для кавычек) был json.

Глядя на документы запросов в Более сложные запросы POST , документально подтверждено, что если вы передадите dict to data его форма закодирована, но если вы передадите строку, это не так. Ваш второй работает, потому что эта строка действительна json.

Поскольку вы передаете «application / json», вы должны просто передать строку в кодировке json. requests имеет параметр, который будет выполнять кодировку за вас, просто переключитесь с использования data= на json=

count_query="SELECT COUNT(*) FROM EMPLOYEE"
headers= {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer'+' '+token}

data = {"query":count_query}

url='https:....................'
try:
    response = requests.post(url, headers=headers, json=data)
    print(response.json) 
    print(response.status_code) 

except Exception as e:
    print(e)
...