eorzea-songbook/build_db.py

76 lines
1.7 KiB
Python

import sqlite3
import os
import pyexcel_odsr
os.remove('songbook.sqlite')
db = sqlite3.connect("songbook.sqlite")
cur = db.cursor()
with open('db.sql') as file:
db.executescript(file.read())
data = pyexcel_odsr.get_data('reference.ods')
clipdata = pyexcel_odsr.get_data('reference_clips.ods')
# import song
cur.executemany(
'insert or ignore into song(id,name,name_jp) values(?, ?, ?)',
((row[0],row[3],row[4]) for row in data['Song'][1:])
)
# import album
cur.executemany(
'insert into album(id,name,date,code) values (?, ?, ?, ?)',
data['Album'][1:]
)
# import artist
cur.executemany(
'insert into artist(id,name_rm,name) values(?, ?, ?)',
data['Artist'][1:]
)
# import credit
cur.executemany(
'insert into credit(id,name) values(?, ?)',
data['Credit'][1:]
)
print(clipdata['Motif'][1:])
# import motif
cur.executemany(
'insert into motif(id,name) values(?, ?)',
clipdata['Motif'][1:]
)
# import clip
cur.executemany(
'insert into clip(start_ms,duration_ms,song_id,motif_id) values (?, ?, ?, ?)',
clipdata['Clip'][1:]
)
# import song x album
cur.executemany(
"insert into song_album(song_id,album_id,track) values (?, ?, ?)",
(row[:3] for row in data['Song'][1:])
)
# import song x artist
def creditparams(rows):
for row in rows[1:]:
for index, artist in enumerate(row[5:], 5):
if len(artist)>0:
yield (row[0],artist,rows[0][index])
cur.executemany(
'''insert or ignore into song_artist(song_id,artist_id,credit_id)
values (
?,
(select id from artist where coalesce(nullif(name_rm,''),name) = ?),
(select id from credit where name = ?))''',
creditparams(data['Song'])
)
db.commit()