Задать вопрос
@Vaskey

Как правильно записать json в longtext в MySql с помощью Python?

Запись json в longtext в MySql с помощью Python

Не могу разобраться как писать данные в longtext Mysql, чтобы потом можно прочитать как json.
62b2d017603f9033244919.png

Делаю следующим образом:

import pymysql

report_days=' "Дата":"22.06.2022","Время":"17:05", "Головная боль":"Да" '
report_json=json.dumps(report_days, ensure_ascii=False).encode('utf8')
cursor.execute('INSERT INTO records (userId, data, date) VALUES (111111, "{%s}" , "2022-06-22")', report_days)

Получаю вот такую строку в базе:
'data': '{\'"\\"Дата\\":\\"22.06.2022\\",\\"Время\\":\\"17:05\\", \\"Головная боль\\":\\"Да\\""\'}'

Если пишу просто как строку, без json.dumps, то

report_days='"Дата":"22.06.2022","Время":"17:05", "Головная боль":"Да"'
cursor.execute('INSERT INTO records (userId, data, date) VALUES (111111, "{%s}" , "2022-06-22")', report_days)


'data': '{\'"Дата":"22.06.2022","Время":"17:05", "Головная боль":"Да"\'}'

А надо чтобы было вот так:

'data': '{"Дата":"12.06.2022","Время":"00:27","Головная боль"}’

Если с помощью python я могу заменить еще косую черту, но с базой работает и php скрипт, который я не могу никак редактировать, а он запись с косыми чертами не понимает
  • Вопрос задан
  • 278 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 1
Раз уж всё равно по этой фигне не получится сделать нормальный поиск, то почему бы вместо экранирования спецсимволов не закодировать всё в base64 и записать в виде base64?

Тоесть при записи идёт цепочка object -> json-> base64 string -> поле в базе
А при чтении наоборот: поле в базе -> base64 string -> json -> object

Кстати вот это у тебя не валидный JSON:
report_days=' "Дата":"22.06.2022","Время":"17:05", "Головная боль":"Да" '
report_json=json.dumps(report_days, ensure_ascii=False).encode('utf8')
# в результате в report_json будет не json-объект, а json-строка, в которой всё содержимое report_days будет экранировано

Скорее всего тебе нужно что-то такое:
report_days = { # Тут у тебя вместо объекта строка, которая только отдалённо похожа на json
 'Дата': '22.06.2022',
 'Время': '17:05',
 'Головная боль': 'Да'
}
report_json = json.dumps(report_days, ensure_ascii = False).encode('utf8')
report_json_base64 = base64.b64encode(bytes(report_json, 'utf-8'))
# INSERT


В каком виде вообще php это потребляет? Есть примеры записей, с которыми php работает?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы