From 3dc19dc4050d949fb2ceafdfb8839be0fa49ec45 Mon Sep 17 00:00:00 2001 From: Xuechen Li Date: Mon, 13 Feb 2023 12:15:48 -0800 Subject: [PATCH] add db. --- ml_swissknife/__init__.py | 2 +- ml_swissknife/db_utils.py | 54 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 ml_swissknife/db_utils.py diff --git a/ml_swissknife/__init__.py b/ml_swissknife/__init__.py index f3b4574..970659c 100644 --- a/ml_swissknife/__init__.py +++ b/ml_swissknife/__init__.py @@ -1 +1 @@ -__version__ = "0.1.15" +__version__ = "0.1.16" diff --git a/ml_swissknife/db_utils.py b/ml_swissknife/db_utils.py new file mode 100644 index 0000000..f82261a --- /dev/null +++ b/ml_swissknife/db_utils.py @@ -0,0 +1,54 @@ +# MIT License +# +# Copyright (c) 2023 Yann Dubois +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# TODO: this should be loaded from database.helpers but streamlit doesn't like importing from another +# directory (even if it's in the sys path) +import sqlite3 +from contextlib import contextmanager + + +@contextmanager +def create_connection(db_file): + """Create a database connection to a SQLite database """ + conn = None + try: + conn = sqlite3.connect(db_file) + print(f"Connected to {db_file} SQLite") + yield conn + except sqlite3.Error as e: + print("Failed to connect with sqlite3 database", e) + finally: + if conn: + conn.close() + + +def create_table(conn, create_table_sql): + """Create a table from the create_table_sql statement + :param conn: Connection object + :param create_table_sql: a CREATE TABLE statement + :return: + """ + try: + c = conn.cursor() + c.execute(create_table_sql) + except sqlite3.Error as e: + print(e)