about summary refs log tree commit diff
path: root/uploader
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2025-05-19 13:06:06 -0500
committerFrederick Muriuki Muriithi2025-05-19 14:20:34 -0500
commit547bd24ec422dc33622d30c5b3562cde32e0e98f (patch)
tree153813a50199810bfb4704891d404f893d34e8ee /uploader
parentaa486e50b5d10592123daf557b1c10825d0cb94b (diff)
downloadgn-uploader-547bd24ec422dc33622d30c5b3562cde32e0e98f.tar.gz
Add function to save the numerical data for phenotypes.
Diffstat (limited to 'uploader')
-rw-r--r--uploader/phenotypes/models.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/uploader/phenotypes/models.py b/uploader/phenotypes/models.py
index fe4ccac..48e64da 100644
--- a/uploader/phenotypes/models.py
+++ b/uploader/phenotypes/models.py
@@ -310,3 +310,29 @@ def create_new_phenotypes(conn: mdb.Connection,
             } for row in cursor.fetchall())
 
     return _phenos
+
+
+def save_phenotypes_data(
+        conn: mdb.Connection,
+        table: str,
+        data: Iterable[dict]
+) -> tuple[dict, ...]:
+    """Save new phenotypes data into the database."""
+    _table_details = {
+        "PublishData": {"table": "PublishData", "valueCol": "value"},
+        "PublishSE": {"table": "PublishSE", "valueCol": "error"},
+        "NStrain": {"table": "PublishData", "valueCol": "count"}
+    }[table]
+    saved_data = tuple()
+    with conn.cursor(cursorclass=DictCursor) as cursor:
+        for batch in take(data, 5000):
+            cursor.executemany(
+            (f"INSERT INTO {_table_details['table']}"
+             f"(Id, StrainId, {_table_details['valueCol']}) "
+             "VALUES "
+             f"(%(data_id)s, %(sample_id)s, %({_table_details['valueCol']})s) "
+             "RETURNING *"),
+                tuple(batch))
+            _data = data + tuple(cursor.fetchall())
+
+    return saved_data