【发布时间】:2017-03-18 22:20:20
【问题描述】:
我的数据结构为dictionary,我想用它来提供database:
playlists={
'user1':{'Karma Police':3.0,'Roxanne':4.0,'Sonnet':5.0,'We Will Rock You':1.0,'Song 1': 1.0},
'user2':{'Karma Police':2.0,'Roxanne':3.0,'Sonnet':2.0,'We Will Rock You':3.0,'Song 2': 1.0},
'user3':{'Karma Police':8.0,'Roxanne':1.0,'Sonnet':6.0,'We Will Rock You':4.0,'Song 3': 1.0},
'user4':{'Karma Police':5.0,'Roxanne':2.0,'Sonnet':1.0,'We Will Rock You':6.0,'Song 4': 1.0},
'user5':{'Karma Police':9.0,'Roxanne':4.0,'Sonnet':7.0,'We Will Rock You':9.0,'Song 4': 1.0}}
然后我将数据组织成单独的lists:
users = [k for k in playlists.keys()]
tracks = [track for track in playlists.values()]//won't need this
track_names = [t.keys() for t in tracks]
counts = [t.values() for t in tracks]
并创建database:
db = sqlite3.connect(':memory:')
db = sqlite3.connect('users/playlistsdb')
c = db.cursor()
c.execute('''
CREATE TABLE playlists(
id text primary key,
user TEXT,
track_names TEXT,
count INTEGER)
''')
使用逻辑columns = ['user', 'track_names', 'counts'],
如何一次将所有值插入playlistsdb?
【问题讨论】:
-
不是问题的答案,但您可以使用
users = list(playlists.keys())和tracks = list(playlists.values())使您的列表更简单 -
我不确定这些列表将如何映射到您的数据库表,但是一旦您拥有代表数据库行的元组列表,您就可以使用 executemany 方法。
-
查询应该类似于
INSERT INTO playlists (id, user, track_names, count) VALUES (%s, %s, %d), (%s, %s, %d), ...。所以创建一个查询字符串,它的值列表与len(users)一样多,然后构建一个包含字典中所有值的列表