从Postgresql数据库中的字典插入表值

时间:2018-12-27 20:28:25

标签: python postgresql

我有一个从JSON文件创建的python字典。现在,我需要传递其值以插入到PostgreSQL数据库中。

词典

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不存在。然后我得到了字典的长度。

现在,我将尝试将这些元素插入依赖于电影的表格媒体中。他们的关系是movie(1):media(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

这就是我想要做的。由于电影可以包含多种媒体,因此我将创建一个for来遍历所有元素并将其插入表格中。随着他们的ID递增。

问题是,我不知道如何在Python中做到这一点,因为我总是创建一个查询和一个数据,然后cur.execute,然后得到的例子就是整个字典。使用,没有任何其他价值。

1 个答案:

答案 0 :(得分:0)

因此,如果有人遇到这种问题,实际上解决方案很简单。

我用以下方法重制了字典:

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

此解决方案由@minboost here

提出

然后,对于插入,是这样的:

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()

一切正常。 :)