Peewee получает таблицы с определенными столбцами из одного вложенного словаря - PullRequest
0 голосов
/ 24 января 2020

У меня есть вывод определенной функции, похожей на эту (это данные Google Analytics, которые дают мне отзывы о пользователях моего сайта)

{'sampleRate': 1,
                               # Pageview activity
 'sessions': [{'activityTime': '2020-01-08T15:48:38.012671Z',
                               'activityType': 'PAGEVIEW',
                               'campaign': '(not set)',
                               'channelGrouping': 'Direct',
                               'customDimension': [{'index': 1}],
                               'hostname': 'company.domain.com',
                               'keyword': '(not set)',
                               'landingPagePath': '/login',
                               'medium': '(none)',
                               'pageview': {'pagePath': '/login',
                                            'pageTitle': 'titleofthepage'},
                               'source': '(direct)'},

                              # Event activity
                              {'activityTime': '2020-01-08T15:48:37.915105Z',
                               'activityType': 'EVENT',
                               'campaign': '(not set)',
                               'channelGrouping': 'Direct',
                               'customDimension': [{'index': 1}],
                               'event': {'eventAction': 'Successfully Logged '
                                                        'In',
                                         'eventCategory': 'Auth',
                                         'eventCount': '1',
                                         'eventLabel': '(not set)'},
                               'hostname': 'company.domain.com',
                               'keyword': '(not set)',
                               'landingPagePath': '/login',
                               'medium': '(none)',
                               'source': '(direct)'}]
               'dataSource': 'web',
               'deviceCategory': 'desktop',
               'platform': 'Windows',
               'sessionDate': '2020-01-08',

ПРИМЕЧАНИЕ О ДЕЯТЕЛЬНОСТИ: Число действий не всегда два, иногда пользователь выполнил 20 действий, а иногда они выполнили только 1, я дал вывод как можно более простым (действие классифицируется как «просмотр страницы» или «событие», но никогда не оба)

ПРИМЕЧАНИЕ ОБ ОРИГИНАЛЬНОЙ ФУНКЦИИ: Исходная функция (та, которая дает выход GA) выполняется в течение 1 oop, для каждого пользователя все данные пользователей хранятся в одном большом списке. Для ясности приведенные выше данные предназначены только для одного пользователя.

ОЖИДАЕМЫЙ ВЫХОД: Мне нужна база данных с двумя таблицами (показано ниже). Я не уверен, как это сделать для многих пользователей, и здесь мне нужна помощь. Я хочу иметь возможность присутствовать на собрании и давать отзывы о наших пользователях.

Таблица 1:

SessionId   User      dataSource  deviceCategory   platform      sessionDuration 
12345         123        web             desktop                windows     00:15:12
...

Таблица 2:

ActivityTime         pageTitle   pagePath   EventCategory   eventCount   eventLabel   eventAction
2019-12-15 20:30:12  domain      webpage    NaN             NaN          NaN          NaN
2019-12-15 20:45:47  NaN         NaN        Aut             1            (not_set)    LoggedIn

PS: I Я знаю, это кажется сложным, но просто: я получаю список вложенных словарей, которые я хочу поместить в базу данных с помощью Peewee, чтобы можно было выполнять запросы с ними.

Если я что-то неправильно понимаю, пожалуйста, дайте мне знать

Я думаю, PRAGMA может сделать свое дело, тогда я должен знать, как хранить все эти данные в виде файла .db (я думаю)? Спасибо:)

1 Ответ

0 голосов
/ 24 января 2020

Я бы посоветовал сохранить эти данные в виде JSON файла, загрузить его встроенным модулем json, а затем делать все, что вы хотите:

Ваш JSON:

{
  "sampleRate": 1,
  "sessions": [
    {
      "activityTime": "2020-01-08T15:48:38.012671Z",
      "activityType": "PAGEVIEW",
      "campaign": "(not set)",
      "channelGrouping": "Direct",
      "customDimension": [
        {
          "index": 1
        }
      ],
      "hostname": "company.domain.com",
      "keyword": "(not set)",
      "landingPagePath": "/login",
      "medium": "(none)",
      "pageview": {
        "pagePath": "/login",
        "pageTitle": "titleofthepage"
      },
      "source": "(direct)"
    },
    {
      "activityTime": "2020-01-08T15:48:37.915105Z",
      "activityType": "EVENT",
      "campaign": "(not set)",
      "channelGrouping": "Direct",
      "customDimension": [
        {
          "index": 1
        }
      ],
      "event": {
        "eventAction": "Successfully Logged In",
        "eventCategory": "Auth",
        "eventCount": "1",
        "eventLabel": "(not set)"
      },
      "hostname": "company.domain.com",
      "keyword": "(not set)",
      "landingPagePath": "/login",
      "medium": "(none)",
      "source": "(direct)"
    }
  ],
  "dataSource": "web",
  "deviceCategory": "desktop",
  "platform": "Windows",
  "sessionDate": "2020-01-08"
}

Python код:

import json
with open('data.json', 'r', encoding='utf-8') as fw:
    obj = json.load(fw)  # your nested dictionary
    # peewee mapping
    # or
    # db insertion
    # or
    # some other stuff
    pass
...