из json в базу данных

216
23 октября 2018, 12:50

Ребят - дано куча json файлов - содержащих данные. Надо поместить данные в базу mysql.Как сделать это быстрее ?

На python написал скрипт: Он работает, но с ростом БД операция вставки данных (INSERT) стала ~ 3 секунды. Подскажите как быстрее справиться с задачей .. может есть смысл записывать данные в разные таблицы - а потом соединить воедино ?

from Sql  import Sql
import sys
import json
import os
import datetime
sql = Sql(db='homestead',user='homestead',passwd='secret',host='192.168.10.10')
def getdata(path):
    fd = open(path)
    with fd as f:
        data = json.load(f)
    fd.close()
    return data
def save(data , channelname):
        i = 0
        for d in data:
        # проверку на "коллизию" убрал - думая что так быстрее будет
        #   query = "SELECT id FROM user_data where channel_name = '%s' and user_id = '%d' ;" % (channelname, d['user']['id'])  
        #   res = sql.result(query)
        #   count =  len(res)
        #   if(count == 0):
                if  'user' in d:
                    if 'id' in d['user']:
                        user_id = d['user']['id']
                    else:
                        break
                    if 'first_name' in d['user']:
                        first_name = d['user']['first_name']
                    else:
                        first_name = ' '
                    if 'last_name' in d['user']:
                        last_name = d['user']['last_name']
                    else:
                        last_name = ' '
                    if 'username' in d['user']:
                        username = d['user']['username']
                    else:
                        username = ' '
                    if 'type' in d['user']:
                        type_val = d['user']['type']
                    else:
                        type_val = ' '
                else:   
                    print('Oops')
                    break
                ctime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S");
                data = {'channel_name' : channelname.encode("utf-8") ,
                    'user_id' : user_id,
                    'user_first_name' : first_name.encode("utf-8"),
                    'user_last_name': last_name.encode("utf-8"),
                    'username' : username.encode("utf-8"),
                    'type' : type_val.encode("utf-8") ,
                    'verified' : 1 ,
                    'role': d['role'].encode("utf-8") ,
                    'phone' : '', 
                    'created_at': ctime,
                    'updated_at': ctime 
                    }
                i += 1
                print(i, data)
                result = sql.insert('user_data' , data)
            #       print(result)
        #query = "UPDATE saved_userdata SET parsed=1, mark='%d' WHERE path ='%s';" % (i ,'./' + channelname)
        #update=sql.update('saved_userdata',{'parsed': 1 , 'mark': i},{'path': channelname})
        #print(update)
        #   else:
        #       continue

try:
    print('Running script')
    query = ("SELECT * FROM saved_userdata where parsed = 0")
    res = sql.result(query)
    for r in res:
        path = r['path'][2:]    
        print(path)
        if os.path.isfile(path):
            data = getdata(path)
            channelname = path.split("./", 1)
            print(channelname)
            save(data, channelname[0])
        else:
            print('I cant read path ( ')
            continue    
except Exception as e:
    print("EXCEPTION :" ,e)
READ ALSO
Как выбрать одну случайную запись из таблицы MySQL

Как выбрать одну случайную запись из таблицы MySQL

Есть таблица (в ней может быть 1 запись, а может 999999999999):

295
Выборка записей до ключевой при ее существовании или полная выборка без нее

Выборка записей до ключевой при ее существовании или полная выборка без нее

Как выбрать записи до ключевой при ее существовании а если ее нет сделать полную выборку

164
Можно ли в MySQL установить права на прцедуры

Можно ли в MySQL установить права на прцедуры

Можно ли в MySQL установить права для пользователя таким образом, что бы он не мог выполнять запросы на insert, update, delete, но мог вызывать хранимые...

163
zabbix 3.4 проблема с mysql

zabbix 3.4 проблема с mysql

Случилась проблема с zabbix 34 после перезагрузки не стартует mysql ругается на память

251