Как перебрать список JSON в Python и вставить в PostgreSQL? - PullRequest
0 голосов
/ 23 октября 2019

Я немного застрял, и решения, которые я могу придумать, закончатся спагетти-кодом.

У меня следующий JSON, я создаю его объект в Python 3 и мне нужно вставить значенияв PostgreSQL.

{
    "name": "test",
    "country": "DE",
    "time": "21-Oct-2019 (09:58:01.694763)",
    "toCurrency": ["EUR", "USD", "GBP"],
    "fromCurrency": ["DKK", "DKK", "DKK"],
    "buyMargin": ["1.2800", "1.2800", "2.0000"],
    "sellMargin": ["1.2800", "1.2800", "2.0000"],
    "unit": "M100" 
}

Я получаю исключение: can only concatenate str (not "list") to str

  • Как я могу перебирать эти списки в Python и вставлять одно значение за раз?

В то же время другие значения 'name', 'country', 'time' должны вставляться каждый раз.

В настоящее время я могу вставить этот JSON:

{
"name": "test",
"country": "DE",
"time": "21-Oct-2019 (09:58:01.694763)",
"toCurrency": "EUR",
"fromCurrency": "DKK",
"buyMargin": "1.2800",
"sellMargin": "1.2800",
"unit": "M100" 
}

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Конвертируйте ваши данные в фрейм данных, используя панд. Затем, используя sqlalchemy, сохраните этот фрейм данных в виде таблицы в PostGre.

import pandas as pd
from sqlalchemy import create_engine
d1 = {
    "name": "test",
    "country": "DE",
    "time": "21-Oct-2019 (09:58:01.694763)",
    "toCurrency": ["EUR", "USD", "GBP"],
    "fromCurrency": ["DKK", "DKK", "DKK"],
    "buyMargin": ["1.2800", "1.2800", "2.0000"],
    "sellMargin": ["1.2800", "1.2800", "2.0000"],
    "unit": "M100" 
}
df1 = pd.DataFrame(d1)
engine = create_engine(
        'postgresql://username:password@host:port/database')
df1.to_sql(tablename, engine, if_exists='append', index=False)

Ваш фрейм данных будет выглядеть следующим образом. И так же будет храниться в виде таблицы в PostGre

enter image description here

1 голос
/ 23 октября 2019

Если я правильно понимаю, и ваши toCurrency, fromCurrency, buyMargin и sellMargin имеют равное количество элементов, которое они должны, вам должно работать следующее:

j = {
    "name": "test",
    "country": "DE",
    "time": "21-Oct-2019 (09:58:01.694763)",
    "toCurrency": ["EUR", "USD", "GBP"],
    "fromCurrency": ["DKK", "DKK", "DKK"],
    "buyMargin": ["1.2800", "1.2800", "2.0000"],
    "sellMargin": ["1.2800", "1.2800", "2.0000"],
    "unit": "M100"
}

for idx, val in enumerate(j['toCurrency']):
    print(j['toCurrency'][idx], j['fromCurrency'][idx], j['buyMargin'][idx], j['sellMargin'][idx])

ИтакВаше заявление вставки должно быть в положении печати, и ваши столбцы должны быть соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...