From 5bab45b779bf576812493c5cf551e099be3635bc Mon Sep 17 00:00:00 2001 From: XANTRONIX Industrial Date: Thu, 13 Feb 2025 17:44:12 -0500 Subject: [PATCH] Fix issues with column placeholders --- lib/nexrad/db.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/nexrad/db.py b/lib/nexrad/db.py index f657c07..618331e 100644 --- a/lib/nexrad/db.py +++ b/lib/nexrad/db.py @@ -91,23 +91,42 @@ class Database(): return Database(db) + def column_placeholders(self, table, obj) -> list: + ctors = getattr(table, '__constructors__') + + if ctors is None: + return ['?' for c in table.__columns__ if c != table.__key__] + if ctors is not None: + ret = list() + + for c in table.__columns__: + if c == table.__key__: + continue + + if c in ctors: + ret.append(ctors[c](getattr(obj, c))) + else: + ret.append('?') + + return ret + def add(self, obj): table = type(obj) sql = f"insert into {table.__table__} (" sql += ", ".join([c for c in table.__columns__ if c != table.__key__]) sql += ') values (' - sql += ", ".join(['?' for c in table.__columns__ if c != table.__key__]) + sql += ", ".join(self.column_placeholders(table, obj)) sql += f") returning {table.__key__}" fn = getattr(obj, '__values__', None) if fn is not None: - values = fn() + values = fn(obj) else: values = list() for column in table.__columns__: - if column != table.__key__: + if column not in table.__constructors__ and column != table.__key__: values.append(getattr(obj, column, None)) cr = self.db.execute(sql, values)