Add utility merge_db.py.
This commit is contained in:
parent
57d87560a4
commit
55d0bb463c
1 changed files with 51 additions and 0 deletions
51
utilities/merge_db.py
Normal file
51
utilities/merge_db.py
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
import sqlite3
|
||||||
|
import sys
|
||||||
|
|
||||||
|
MIGRATE_QUERY = '''
|
||||||
|
INSERT INTO {tablename}
|
||||||
|
SELECT othertable.* FROM other.{tablename} othertable
|
||||||
|
LEFT JOIN {tablename} mytable ON mytable.id == othertable.id
|
||||||
|
WHERE mytable.id IS NULL AND {where_clause};
|
||||||
|
'''
|
||||||
|
|
||||||
|
def _migrate_helper(sql, tablename, where_clause='1==1'):
|
||||||
|
query = MIGRATE_QUERY.format(tablename=tablename, where_clause=where_clause)
|
||||||
|
print(query)
|
||||||
|
|
||||||
|
oldcount = sql.execute('SELECT count(*) FROM %s' % tablename).fetchone()[0]
|
||||||
|
sql.execute(query)
|
||||||
|
sql.commit()
|
||||||
|
|
||||||
|
newcount = sql.execute('SELECT count(*) FROM %s' % tablename).fetchone()[0]
|
||||||
|
print('Gained %d items.' % (newcount - oldcount))
|
||||||
|
|
||||||
|
def merge_db(from_db_path, to_db_path, channel):
|
||||||
|
to_db = sqlite3.connect(to_db_path)
|
||||||
|
from_db = sqlite3.connect(from_db_path)
|
||||||
|
|
||||||
|
to_db.execute('ATTACH DATABASE "%s" AS other' % from_db_path)
|
||||||
|
if channel == '*':
|
||||||
|
_migrate_helper(to_db, 'channels')
|
||||||
|
_migrate_helper(to_db, 'videos')
|
||||||
|
else:
|
||||||
|
_migrate_helper(to_db, 'channels', where_clause=f'othertable.id == "{channel}"')
|
||||||
|
_migrate_helper(to_db, 'videos', where_clause=f'othertable.author_id == "{channel}"')
|
||||||
|
|
||||||
|
def merge_db_argparse(args):
|
||||||
|
return merge_db(args.from_db_path, args.to_db_path, args.channel)
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
parser = argparse.ArgumentParser(description=__doc__)
|
||||||
|
|
||||||
|
parser.add_argument('--from_db_path', dest='from_db_path', required=True)
|
||||||
|
parser.add_argument('--to_db_path', dest='to_db_path', required=True)
|
||||||
|
parser.add_argument('--channel', dest='channel', required=True)
|
||||||
|
parser.set_defaults(func=merge_db_argparse)
|
||||||
|
|
||||||
|
args = parser.parse_args(argv)
|
||||||
|
return args.func(args)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
raise SystemExit(main(sys.argv[1:]))
|
Loading…
Reference in a new issue