EvaSpence
@EvaSpence

Как перевести словарь в JSON, чтобы потом можно было его загрузить в POSTGRESQL?

Как перевести словарь в JSON, чтобы потом можно было его загрузить в POSTGRESQL и по этому можно было делать select'ы и join'ы?

Есть код который на выходе дает словарь со спарсеными значениями.
Дальше ступор ..

Приложу ссылку на архив https://drive.google.com/drive/folders/1t0tIVOMI36i6kl0ByPr4gxddUEC0h9lQ

    import psycopg2
    from psycopg2 import Error
    import pandas as pd
    import sqlalchemy
    from sqlalchemy import create_engine
    import tarfile
    import re
    import json
    import os


    ##############################
    #      STEP 1
    ##############################
    name_tar = "fio-example (3).tar.gz"
    tar = tarfile.open(name_tar)
    tar.extractall()
    tar.close()
    #распакует весь архив, то есть путь будет ..\fio-example\test.log
    ##############################
    #      STEP 2
    ##############################


    dir_t = os.path.dirname(__file__)
    filename = os.path.join(dir_t, 'fio-example', 'test.log')

    def reader(filename):

        regexp = r'{(?s:.*)}'

        with open(filename) as f:
            log = f.read()

            json_value = re.findall(regexp, log)

            log_dict = json.loads(json_value[0])

            #print(log_dict["fio version"])#проверочный
        return log_dict

    #if name == 'main':
        #reader(filename)

    #############################
    #       STEP 3
    #############################

    
    data_dict = reader(filename)
    print(data_dict)



    #-------------------------------------РАБОТА С БД-------------------------------------------------------------


    try:
        # Подключиться к существующей базе данных
        connection = psycopg2.connect(user="postgres",
                                    # пароль, который указали при установке PostgreSQL
                                    password="qwerty",
                                    host="127.0.0.1",
                                    port="5432",
                                    database="result_test_parsing")

        # Создайте курсор для выполнения операций с базой данных
        cursor = connection.cursor()
        # Пример SQL-запроса для создания новой таблицы
        create_table_query = '''CREATE TABLE fio
                            (ID INT PRIMARY KEY     NOT NULL,
                            MODEL           TEXT    NOT NULL,
                            PRICE         REAL); '''
        # Выполнение команды: это создает новую таблицу
        cursor.execute(create_table_query)
        connection.commit()
        print("Таблица успешно создана в PostgreSQL")

    except (Exception, Error) as error:
        print("Ошибка при работе с PostgreSQL", error)
    finally:
        if connection:
            cursor.close()
            connection.close()
            print("Соединение с PostgreSQL закрыто")
  • Вопрос задан
  • 453 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
EvaSpence, так. По порядку...
1. JSON - это формат хранения данных. С точки зрения Питона, JSON - это просто строка текста в определённом формате. Например, результат чтения из файла. Обычно стоит задача распарсить эту строку текста в какую-то структуру данных - например, в тот же словарь, или список, или их комбинацию. Для этой цели используются функции json.load() или json.loads() из модуля json. С ними ты вроде разобрался.
2. Хранение JSON в БД - вещь двусмысленная. Можно взять некоторую структуру данных (неважно какую), превратить их в текстовую строку в формате JSON с помощью json.dumps(), и сохранить эту строку в БД. Это просто, это сработает для любой структуры данных, но это ещё и практически бесполезно. Так что я сомневаюсь, что речь об этом. Тебе придётся это уточнить.
Либо можно разобраться, что за данные к нам поступают, какая их структура, какая их часть нас интересует, и какая потребуется структура базы данных, чтобы эту часть корректно сохранить (нормальные формы реляционных БД и всё такое).
Я посмотрел пример - там довольно объёмная структура данных, что именно из неё требуется сохранять? Потому что навскидку выделить в ней сущности (которые станут таблицами БД) - непросто. Или же БД уже существует, и таблицы уже созданы? Тут нужны дополнительные сведения от того, кто эту задачу поставил.
3. Как с помощью sqlalchemy или другой библиотеки подключиться к БД, сформировать в ней нужные таблицы (если это требуется), и выполнить запрос типа INSERT. Это достаточно нудная, но тривиальная задача, решается вдумчивым чтением документации к используемой библиотеки для работы с БД. Возможно, придётся поиграться с локальной тестовой БД - для начала.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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