|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
# Standard library modules
|
|
|
import logging
|
|
|
+from typing import Tuple
|
|
|
|
|
|
# Third party modules
|
|
|
import dataset
|
|
@@ -71,3 +72,32 @@ class ObjectWithDatabase(object):
|
|
|
)
|
|
|
except Exception as e:
|
|
|
logging.error(f"{e}")
|
|
|
+
|
|
|
+ def add_table_and_columns_if_not_existent(self,
|
|
|
+ table_name: str,
|
|
|
+ columns: Tuple[
|
|
|
+ Tuple[str,
|
|
|
+ dataset.database.Types],
|
|
|
+ ...] = None):
|
|
|
+ """Create table (if it does not exist) and add given columns (if missing).
|
|
|
+
|
|
|
+ @param table_name: Table name (string)
|
|
|
+ @param columns: Table columns as tuples of column name and type
|
|
|
+ @return: None
|
|
|
+ """
|
|
|
+ if table_name not in self.db.tables:
|
|
|
+ table = self.db.create_table(table_name=table_name)
|
|
|
+ logging.info(f"Created table `{table_name}`")
|
|
|
+ else:
|
|
|
+ table = self.db[table_name]
|
|
|
+ if columns is None:
|
|
|
+ columns = []
|
|
|
+ for column_name, column_type in columns:
|
|
|
+ if not table.has_column(column_name):
|
|
|
+ table.create_column(
|
|
|
+ column_name,
|
|
|
+ column_type
|
|
|
+ )
|
|
|
+ logging.info(f"Added column `{column_name}` "
|
|
|
+ f"(type `{column_type}`) "
|
|
|
+ f"to table `{table_name}`")
|