我有一个从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
,然后得到的例子就是整个字典。使用,没有任何其他价值。
答案 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()
一切正常。 :)