diff --git a/python/waLBerla/tools/sqlitedb/insert.py b/python/waLBerla/tools/sqlitedb/insert.py index 2e759af079990f3ddc42a93f2918a46218e67df9..8549a8bf633a3f5d988292d8515f6ba59b8ae935 100644 --- a/python/waLBerla/tools/sqlitedb/insert.py +++ b/python/waLBerla/tools/sqlitedb/insert.py @@ -139,16 +139,26 @@ def checkAndUpdateSchema(data, tableName, dbFile="database.sqlite", referenceRun columns = ["%s %s" % e for e in zip(names, types)] create_query = "CREATE TABLE IF NOT EXISTS %s ( %s );" % (tableName, ",".join(columns)) - alter_queries = ["ALTER TABLE %s ADD COLUMN %s %s;" % (tableName, key, typ) for key, typ in zip(names, types)] conn = sqlite3.connect(dbFile) c = conn.cursor() + # Execute the create table query c.execute(create_query) + if alter_table: - for q in alter_queries: + # Fetch existing columns + c.execute(f"PRAGMA table_info({tableName})") + existing_columns = [info[1] for info in c.fetchall()] + + # Filter out columns that already exist + new_columns = [(key, typ) for key, typ in zip(names, types) if key not in existing_columns] + + # Generate and execute alter table queries for new columns + for key, typ in new_columns: + alter_query = f"ALTER TABLE {tableName} ADD COLUMN {key} {typ};" try: - c.execute(q) + c.execute(alter_query) except sqlite3.OperationalError as e: print(e) pass