import sqlite3 def create_database(name): return sqlite3.connect(name) # TODO better way to do the above # def create_connection(db_file): # """create a database connection to the SQLite database # specified by db_file # :param db_file: database file # :return: Connection object or None # """ # conn = None # try: # conn = sqlite3.connect(db_file) # return conn # except Error as e: # print(e) # return conn def create_tables(db): c = db.cursor() c.execute( """ CREATE TABLE IF NOT EXISTS Habits ( id integer PRIMARY KEY AUTOINCREMENT, archived integer, color integer, description text, freq_den integer, freq_num integer, highlight integer, name text, position integer, reminder_hour integer, reminder_min integer, reminder_days integer NOT NULL DEFAULT 127, type integer NOT NULL DEFAULT 0, target_type integer NOT NULL DEFAULT 0, target_value real NOT NULL DEFAULT 0, unit text NOT NULL DEFAULT "", question text, uuid text ); """ ) c.execute( """ CREATE TABLE IF NOT EXISTS Repetitions ( id integer PRIMARY KEY AUTOINCREMENT, habit integer NOT NULL REFERENCES Habits(id), timestamp integer NOT NULL, value integer NOT NULL ); """ ) def create_constraints(db): c = db.cursor() c.execute( """ CREATE UNIQUE INDEX IF NOT EXISTS idx_repetitions_habit_timestamp on Repetitions( habit, timestamp); """ ) def create_pragma(db): c = db.cursor() c.execute(""" PRAGMA user_version = 24; """) c.execute(""" PRAGMA schema_version = 30; """) def migrate(name): db = create_database(name) create_tables(db) create_constraints(db) create_pragma(db) return db