Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
2 / 2 / 3
Регистрация: 30.07.2013
Сообщений: 48

Парсинг из JSON в MySQL

02.06.2016, 16:07. Показов 5813. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток.

Стоит задача: средствами Python парсить json-файлы и заносить результат в базу mySQL.
У меня много файлов по ~1МБ каждый, содержащих множество записей (устройства, подключавшиеся к сети).
Краткий пример файла:
JSON-файл
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{"limit": 10, "new": 
[   {"ts_create": "2013-09-11 20:00:00", "attrs": 
        {"device_model": null, "date_detected": "2013-09-11 20:00:00", "device_imei": "123456789123456"}, 
    "ts_update": "2015-12-13 17:45:26", "id": 211}, 
    {"ts_create": "2013-09-11 20:00:00", "attrs": 
        {"device_model": "apple", "date_detected": "2013-09-11 20:00:00", "device_imei": "354314052054256"}, 
    "ts_update": "2015-12-13 17:45:26", "id": 216},
    {"ts_create": "2013-09-11 20:00:00", "attrs": 
        {"device_model": null, "date_detected": "2013-09-11 20:00:00", "device_imei": "352101050697245"}, 
    "ts_update": "2015-12-13 17:45:26", "id": 222}, 
    {"ts_create": "2013-09-11 20:00:00", "attrs": 
        {"device_model": "samsung", "date_detected": "2013-09-11 20:00:00", "device_imei": "352684050760842"}, 
    "ts_update": "2015-12-13 17:45:26", "id": 225}, 
    {"ts_create": "2013-09-11 20:00:00", "attrs": 
        {"device_model": null, "date_detected": "2013-09-11 20:00:00", "device_imei": "353922042455791"}, 
    "ts_update": "2015-12-13 17:45:26", "id": 231}
]}


Так как я раньше не имел дела ни с одним, ни с другим, начал с простого: прочитать данные из json-файла и вывести на экран.
код питона
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import json
from pprint import pprint
 
# define read function
def read(filename):
    with open(filename) as data_file:
        data = json.load(data_file)
        write(data)
        parse(data)
 
# define write to sql function
def write(strdata):
    pprint('::: DATA FROM FILE :::')
    pprint(strdata)
    pprint('::: END DATA FROM FILE :::')
 
# define parse function
def parse(strdata):
    decoder = json.JSONDecoder()
    try:
        for line in strdata:
            if len(line) > 0:           
                print(decoder.decode(line))
    except ValueError as e:
        print(e)
    
read('json_test.json')


Сначала я считываю данные функцией read, потом вывожу на экран функцией write и пытаюсь понять, как разбирать строки функцией parse.
Собственно, она и вызывает ошибку: "Expecting value: line 1 column 1 (char 0)".

Про MySQL я пока не заикаюсь, мне бы понять, чем вызвана ошибка.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2016, 16:07
Ответы с готовыми решениями:

Из MySQL в JSON и парсинг
Имеется код по доставанию данных из БД $query = "SELECT * FROM data"; $result = mysqli_query( $link, $query ); while ($row =...

Парсинг JSON в JSON Linked Data с использованием Hydra Java
Есть веб страница, на которой пользователь заполняет поля, жмет на кнопку и затем данные отправляются на сервер. На сервере работает...

Парсинг Json через Json.N - отсутствует доступ к JObject
Здравствуйте, помогите распарсить Json через Json.N Сделал вот так Dim respone As String =...

13
Заблокирован
02.06.2016, 16:35
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import json
 
 
def json_readf(filename, encoding='utf-8'):
    with open(filename, 'r', encoding=encoding) as json_file:
            return json.load(json_file)
 
 
def jsread(filename, encoding='utf-8'):
    try:
        return json_readf(filename, encoding)
    except Exception as e:
        print('JsRead: Exc ' + str(e) + ' in file ' + filename)
        return None
для работы с БД учите sqlalhemy
P.S. приложите файл полностью

Добавлено через 10 минут
Python
1
2
3
4
5
6
7
data = jsread(filename) #если будет None замените jsread на jsonreadf
print('Data', data)
print('limit', data['limit'])
print('new', data['new'])
for idx, obj in enumerate(data['new']):
    print(idx, obj)
    print('ts_update', data['new'][idx]['ts_update'])
1
2 / 2 / 3
Регистрация: 30.07.2013
Сообщений: 48
02.06.2016, 17:07  [ТС]
Большое спасибо, не знал про " encoding='utf-8' ".
К сожалению, при загрузке вложений получаю ошибку 407, поэтому файлы json и питона тут:
https: //cloud.mail.ru/public/Mps4/xExXRdLzG
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
02.06.2016, 17:21
Wormeater, запустил, ничего не падает
0
Заблокирован
02.06.2016, 17:43
Ну я тоже запустил все норм. У вас же 3 питон?
0
2 / 2 / 3
Регистрация: 30.07.2013
Сообщений: 48
03.06.2016, 12:17  [ТС]
Спасибо за тесты, да, питон 3.

Подскажите заодно, пожалуйста, на вот этой странице тоже код для питона 3?
SQLAlchemy - как проверить подключение

"apt-get install python-sqlalchemy" говорит, что пакеты установлены и в обновлении не нуждаются, но в результате выполнения кода:
Python
1
import sqlalchemy
получаю ошибку:
ImportError: No module named 'sqlalchemy'

Подскажите, пожалуйста, как указать питону на библиотеку?

Добавлено через 58 минут
Прошу прощения, конечно же надо было использовать "apt-get install python3-sqlalchemy".

Но теперь я получаю ошибку "No module named 'pymysql'".

"А нужен ли он мне?" - подумал я и изменил строку:
Python
1
DBengine   = "mysql+pymysql://"
на
Python
1
DBengine   = "mysql://"
Правда, теперь я получаю в ответ "No module named 'MySQLdb'".
"apt-get install python-mysqldb" отвечает, что пакеты установлены, а "apt-get install python3-mysqldb" - что "Package python3-mysqldb is not available, but is reffered to by another package."

Подскажите, пожалуйста, какие в принципе модули нужны для занесения данных в MySQL? И, по возможности, имена пакетов для debian, которые следует установить.
Заранее спасибо!
0
Заблокирован
03.06.2016, 13:35
sudo pip3 install SQLAlchemy
sudo apt-get install python3-pymysql
такую команду выполните
коннект
Python
1
mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
потом просто прочитайте и выполните для теста эту статью https://ru.wikibooks.org/wiki/SQLAlchemy
0
2 / 2 / 3
Регистрация: 30.07.2013
Сообщений: 48
03.06.2016, 14:31  [ТС]
К сожалению, не помогает:

root@pc-030-001288K:~/Desktop/bt# pip3 install SQLAlchemy
Requirement already satisfied (use --upgrade to upgrade): SQLAlchemy in /usr/lib/python3/dist-packages
Cleaning up...
root@pc-030-001288K:~/Desktop/bt# apt-get install python3-pymysql
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package python3-pymysql

Ошибка та же. В понедельник продолжу копать.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
03.06.2016, 14:43
Wormeater,
Bash
1
sudo pip3 install pymysql
0
2 / 2 / 3
Регистрация: 30.07.2013
Сообщений: 48
06.06.2016, 08:46  [ТС]
alex925,

root@pc-030-001288K:~# pip3 install pymysql
Downloading/unpacking pymysql
Downloading PyMySQL-0.7.4-py2.py3-none-any.whl (76kB): 76kB downloaded
Installing collected packages: pymysql
Successfully installed pymysql
Cleaning up...
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
06.06.2016, 09:24
Wormeater, и что? Все, установил модуль, молодец.
0
2 / 2 / 3
Регистрация: 30.07.2013
Сообщений: 48
06.06.2016, 11:01  [ТС]
alex925, и действительно. Прошу прощения, изучаю https://ru.wikibooks.org/wiki/SQLAlchemy
0
0 / 0 / 0
Регистрация: 10.01.2016
Сообщений: 26
06.06.2016, 17:48

Не по теме:

Чтобы не создавать отдельный топик:



Python
1
2
3
4
5
6
nums =[10, 9, 8, 7, 6, 5]
nums[0] = nums[1] -5
if 4 in nums:
    print(nums[3])
else:
    print(nums[4])
Почему получается 7?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
06.06.2016, 18:53
Цитата Сообщение от muzqaymoq-com Посмотреть сообщение
Почему получается 7?
Потому, что топик новый не создал

P.S а вообще все правильно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2016, 18:53
Помогаю со студенческими работами здесь

Парсинг JSON с short.pub посредством NewtonSoft.Json
Доброго времени суток. Имеется сокращалка сайтов short.pub, у которой есть API, который возвращает JSON, содержащий сокращённые ссылки...

Парсинг JSON ответа. Парсинг строки с массивами
Есть ответ с сервера в виде json: ,\&quot;Polygon\&quot;:,]}&quot;, &quot;OrganizationId&quot;: 2, &quot;SyncDate&quot;: &quot;2021-01-20T11:23:42.007&quot; ...

Парсинг JSON ответа. Парсинг строки с массивами
public class LocationData { public double Center { get; set; } } public class Field : IField ...

Парсинг json ответа api vk. Вложенность Json
Ответ в json response: { count: 6641, items: , post_source: { type: 'vk' }, comments: { count: 24,

[Newtonsoft.Json] Парсинг JSON-ответа
Здравствуйте уважаемые участники сообщества &quot;CyberForum&quot; ! У меня возникла небольшая проблема. Я перелопатил кучу форумов и 15 страниц...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru