Вставить в таблицу значения из словаря в базе данных Postgresql - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть словарь на python, который я создал из файла JSON.Теперь мне нужно передать его значения для вставки в базу данных postgresql.

dictionary

if(i['trailers']):
    a = [
        {'url': i['images'][0]['url'], 'type': i['images'][0]['type']},
        {'url': i['images'][1]['url'], 'type': i['images'][1]['type']},
        {'url': i['trailers'][0]['url'], 'type': 'Trailer'},
        {'url': i['trailers'][1]['url'], 'type': 'Trailer'},
    ]
else:
    a = [
        {'url': i['images'][0]['url'], 'type': i['images'][0]['type']},
        {'url': i['images'][1]['url'], 'type': i['images'][1]['type']},
    ]
length = len(a)

Здесь я создал словарь.Если внутри trailer есть что-то, оно идет A, иначе оно идет B. В случае B, trailers не существует.Затем я получаю длину словаря.

Теперь я попытаюсь вставить эти элементы в настольный носитель, который зависит от фильмов.Их отношение - фильм (1): СМИ (n).

ВСТАВИТЬ В СМИ

for x in range(length):
    query = ("""INSERT INTO media VALUES (%s, %s, %(url)s, %(type)s);""")
    data = (media_id, media_movie_id)
    cur.execute(query, data)
    conn.commit()
    media_id += 1

Вот что я пытаюсь сделать.Поскольку в фильме может быть много медиафайлов, я создам форму для перемещения по всем элементам и вставки их в таблицу.При увеличении их идентификатора.

Проблема в том, что я не знаю, как сделать это тихо прямо в Python, поскольку я всегда создаю запрос и данные, а затем cur.execute это и пример, который яполучил, использовался весь словарь, без какого-либо другого значения.

1 Ответ

0 голосов
/ 28 декабря 2018

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

Я переделал свой диктант примерно так:

i['trailers'] = i.get('trailers') or []
dictionary = [{'url': x['url'], 'type': x['type']} for x in i['images'] + i['trailers']]

Это решение было принято @minboost здесь

Тогда для вставки будет что-то вроде этого:

for i, dic in enumerate(dictionary):
    query = ("""
        INSERT INTO media (id, movie_id, url, type)
        VALUES (%s, %s, %s, %s);
        """
    )
    data = (media_id, media_movie_id, dictionary[i]['url'], dictionary[i]['type'])
    cur.execute (query, data)
    conn.commit()

Все работает отлично.:)

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