From ab108e2988ed15b3de4db506a36444d9c736348d Mon Sep 17 00:00:00 2001 From: BonfaceKilz Date: Mon, 26 Jul 2021 22:00:25 +0300 Subject: gn3: db: Create a raw update query * gn3/db/__init__.py (update_raw): New function. --- gn3/db/__init__.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'gn3') diff --git a/gn3/db/__init__.py b/gn3/db/__init__.py index 5ab9f3c..24ae8f1 100644 --- a/gn3/db/__init__.py +++ b/gn3/db/__init__.py @@ -1,7 +1,7 @@ # pylint: disable=[R0902, R0903] """Module that exposes common db operations""" from dataclasses import asdict, astuple -from typing import Any, Dict, List, Optional, Generator, Union +from typing import Any, Dict, List, Optional, Generator, Tuple, Union from typing_extensions import Protocol from gn3.db.metadata_audit import MetadataAudit @@ -64,6 +64,20 @@ def update(conn: Any, return cursor.rowcount +def update_raw(conn: Any, table: str, + set_: List[Tuple[str, Any]], + where: Tuple[str, Tuple]): + """Run a generic raw statement""" + sql = f"UPDATE {table} SET " + sql += ", ".join([f"{k} = '%s'" for k, v in set_]) + sql += f" WHERE {where[0]}" + with conn.cursor() as cursor: + cursor.execute(sql, + tuple(v for _, v in set_) + where[1]) + conn.commit() + return cursor.rowcount + + def fetchone(conn: Any, table: str, where: Optional[Dataclass], -- cgit v1.2.3