Fix string encoding on insert; adopt query parameters for update
This commit is contained in:
@@ -28,7 +28,7 @@ def _create_entry(self) -> None:
|
|||||||
cur.execute(f"INSERT INTO {table_name}("
|
cur.execute(f"INSERT INTO {table_name}("
|
||||||
f"{', '.join(item[0] for item in kv_pairs)})"
|
f"{', '.join(item[0] for item in kv_pairs)})"
|
||||||
f" VALUES ({', '.join('?' for item in kv_pairs)})",
|
f" VALUES ({', '.join('?' for item in kv_pairs)})",
|
||||||
[_convert_sql_format(item[1]) for item in kv_pairs])
|
[item[1] for item in kv_pairs])
|
||||||
self.__setattr__("obj_id", cur.lastrowid)
|
self.__setattr__("obj_id", cur.lastrowid)
|
||||||
con.commit()
|
con.commit()
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
@@ -47,9 +47,9 @@ def _update_entry(self) -> None:
|
|||||||
kv_pairs = [item for item in asdict(self).items()]
|
kv_pairs = [item for item in asdict(self).items()]
|
||||||
kv_pairs.sort(key=lambda item: item[0])
|
kv_pairs.sort(key=lambda item: item[0])
|
||||||
query = f"UPDATE {table_name} " + \
|
query = f"UPDATE {table_name} " + \
|
||||||
f"SET {', '.join(item[0] + ' = ' + _convert_sql_format(item[1]) for item in kv_pairs)} " + \
|
f"SET {', '.join(item[0] + ' = ?' for item in kv_pairs)} " + \
|
||||||
f"WHERE obj_id = {getattr(self, 'obj_id')};"
|
f"WHERE obj_id = {getattr(self, 'obj_id')};"
|
||||||
cur.execute(query)
|
cur.execute(query, [item[1] for item in kv_pairs])
|
||||||
con.commit()
|
con.commit()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -64,9 +64,6 @@ def getValFromDB(obj_id = 1):
|
|||||||
fields.sort()
|
fields.sort()
|
||||||
repr = dict(zip(fields, cur.fetchall()[0][1:]))
|
repr = dict(zip(fields, cur.fetchall()[0][1:]))
|
||||||
field_types = {key: value.type for key, value in TestClass.__dataclass_fields__.items()}
|
field_types = {key: value.type for key, value in TestClass.__dataclass_fields__.items()}
|
||||||
for key in fields:
|
|
||||||
if field_types[key] == bytes:
|
|
||||||
repr[key] = bytes(repr[key], encoding='utf-8')
|
|
||||||
test_object = TestClass(**repr)
|
test_object = TestClass(**repr)
|
||||||
return test_object
|
return test_object
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user