File: SQLQueryFactory.py

package info (click to toggle)
uranium 5.0.0-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,304 kB
  • sloc: python: 31,765; sh: 132; makefile: 12
file content (76 lines) | stat: -rw-r--r-- 2,269 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# Copyright (c) 2021 Ultimaker B.V.
# Uranium is released under the terms of the LGPLv3 or higher.

from typing import Dict, Any

metadata_type = Dict[str, Any]


class SQLQueryFactory:
    """Provides the SQL query strings"""

    def __init__(self, table: str, fields: metadata_type) -> None:
        self._table = table
        self._fields = fields
        self.__create = ""
        self.__insert = ""
        self.__update = ""
        self.__select = ""
        self.__delete = ""
        self._update_queries()

    @property
    def table(self) -> str:
        """DB table name"""
        return self._table

    @table.setter
    def table(self, value: str) -> None:
        self._table = value
        self._update_queries()

    @property
    def fields(self) -> metadata_type:
        """DB fields"""
        return self._fields

    @fields.setter
    def fields(self, value: metadata_type) -> None:
        self._fields = value
        self._update_queries()

    @property
    def create(self) -> str:
        """Create SQL query """
        return self.__create

    @property
    def insert(self) -> str:
        """Insert SQL query """
        return self.__insert

    @property
    def update(self) -> str:
        """Update SQL query """
        return self.__update

    @property
    def select(self) -> str:
        """Select SQL query """
        return self.__select

    @property
    def delete(self) -> str:
        """Delete SQL query """
        return self.__delete

    def _update_queries(self) -> None:
        values = ", ".join(["?" for k in self.fields.keys()])
        columns_create = ", ".join([f"{k} {v}" for k, v in self.fields.items()])
        self.__create = f"CREATE TABLE {self.table} ({columns_create}); CREATE UNIQUE INDEX idx_{self.table}_id on {self.table} (id);"
        columns_insert = ", ".join([f"{k}" for k in self.fields.keys()])
        self.__insert = f"INSERT INTO {self.table} ({columns_insert}) VALUES ({values})"
        columns_update = ", ".join([f"{k} = ?" for k in self.fields.keys()])
        self.__update = f"UPDATE {self.table} SET {columns_update} WHERE id = ?"
        self.__select = f"SELECT * FROM {self.table} WHERE id = ?"
        self.__delete = f"DELETE FROM {self.table} WHERE id = ?"