""" copy data from MariaDB to SQLite """ import sqlite3 import mariadb from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter from setup import get_database_cursors, create_tables, get_logger, get_meta_data, get_scripts parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument('--recreate-db', action='store_true') parser.add_argument('--verbose', '-v', action='count', default=0) args = parser.parse_args() def copy_data(mariadb_conn, sqlite_conn, table_scripts): mariadb_cursor = mariadb_conn.cursor() sqlite_cursor = sqlite_conn.cursor() # logger.info(table_scripts) for table_id in table_scripts: select_statement = scripts[table_id]['select_mariadb'] # logger.info(select_statement) insert_statement = scripts[table_id]['insert_sqlite'] try: mariadb_cursor.execute(select_statement) rows = mariadb_cursor.fetchall() for row in rows: try: sqlite_cursor.execute(insert_statement, row) except sqlite3.Error as error: logger.info('insert failed with %s\n%s\n%s', error, insert_statement, row) sqlite_conn.commit() mariadb_cursor.execute(scripts[table_id]['count']) (number_of_rows,) = mariadb_cursor.fetchone() row = sqlite_cursor.execute(scripts[table_id]['count']).fetchone() logger.info('%s contains %d : %d entries', scripts[table_id]['name'], number_of_rows, row[0]) except mariadb.Error as error: logger.info('select failed with %s', error) if __name__ == '__main__': logger = get_logger(args.verbose) logger.info('kontor.copy_to_sqlite started') s_conn, m_conn = get_database_cursors(logger) meta_data_tables = get_meta_data(m_conn) # logger.info(meta_data_tables) scripts = get_scripts(meta_data_tables, logger) create_tables(s_conn, logger, args.recreate_db, scripts) copy_data(m_conn, s_conn, scripts) s_conn.close() m_conn.close() logger.info('kontor.copy_to_sqlite finished')