我试图在sqlite表中存储播放列表。为了节省存储空间,我想将歌曲艺术家和标题保存在表格中,并使用表格的rowid来存储剧情。Python&Sqlite3 - 如何从两条select语句插入ID
数据库的结构是这样的:
conn = sqlite3.connect('playlist.db')
c = conn.cursor()
sqlcommand= 'CREATE TABLE if not EXISTS artists(artist text PRIMARY KEY)'
c.execute(sqlcommand)
sqlcommand= 'CREATE TABLE if not EXISTS titles(title text PRIMARY KEY)'
c.execute(sqlcommand)
sqlcommand= 'CREATE TABLE if not EXISTS plays(PlayDate date, PlayTime datetime, ArtistID integer, TitleID integer)'
c.execute(sqlcommand)
每首歌曲的表演事件存储这样
sqlcommand= 'INSERT or IGNORE INTO artists VALUES ("' + FoundArtist + '")'
c.execute(sqlcommand)
sqlcommand= 'INSERT or IGNORE INTO titles VALUES ("' + FoundTitle + '")'
c.execute(sqlcommand)
sqlcommand= 'SELECT ROWID from artists where artist = "'+FoundArtist+'"'
c.execute(sqlcommand)
ArtistID = str(c.fetchone()[0])
sqlcommand= 'SELECT ROWID from titles where title = "'+FoundTitle+'"'
c.execute(sqlcommand)
TitleID = str(c.fetchone()[0])
sqlcommand= 'INSERT or IGNORE INTO plays VALUES ("' + FoundPlayDate + '",' + \
'"'+ FoundPlayTime + '",' + \
ArtistID + ',' + \
TitleID + ')'
c.execute(sqlcommand)
这工作,但相当缓慢。
如何组合两个select和last insert命令,以便它们同时运行?
我对树莓PI运行的Python 2.7.6(与Raspian/Debian的喘息)
VACUUM评论的好处。我将在我的空闲时间稍后测试它,并在这适用于我时标记它解决。谢谢。 – 576i
我遇到了'c.execute(“SELECT ID FROM titles WHERE name =?”,(FoundTitle,))''''我在哪里出错** sqlite3。ProgrammingError:除非使用可解释8位字节串的text_factory,否则不得使用8位字节串**,以便我将它们组装为字符串。其余的工作正常,所以我会标记这个解决。 – 576i