support lists of tuples in QueryBuilder
This commit is contained in:
parent
604f9d6aba
commit
04a59c8396
45
app/db.py
45
app/db.py
@ -87,9 +87,21 @@ class DB:
|
||||
class QueryBuilder:
|
||||
def __init__(self, table):
|
||||
self.table = table
|
||||
self._where = {}
|
||||
self._where = [] # list of tuples
|
||||
self._select = "*"
|
||||
self._params = []
|
||||
|
||||
|
||||
def _build_where(self):
|
||||
if not self._where:
|
||||
return "", []
|
||||
|
||||
conditions = []
|
||||
params = []
|
||||
for col, op, val in self._where:
|
||||
conditions.append(f"{col} {op} ?")
|
||||
params.append(val)
|
||||
|
||||
return " WHERE " + " AND ".join(conditions), params
|
||||
|
||||
|
||||
def select(self, columns = "*"):
|
||||
@ -97,35 +109,34 @@ class DB:
|
||||
return self
|
||||
|
||||
|
||||
def where(self, condition):
|
||||
self._where.update(condition)
|
||||
def where(self, condition, operator = "="):
|
||||
if isinstance(condition, dict):
|
||||
for key, value in condition.items():
|
||||
self._where.append((key, "=", value))
|
||||
elif isinstance(condition, list):
|
||||
for c in condition:
|
||||
self._where.append(c)
|
||||
return self
|
||||
|
||||
|
||||
def build_select(self):
|
||||
sql = f"SELECT {self._select} FROM {self.table}"
|
||||
if self._where:
|
||||
conditions = " AND ".join(f"{k} = ?" for k in self._where.keys())
|
||||
sql += f" WHERE {conditions}"
|
||||
return sql, list(self._where.values())
|
||||
where_clause, params = self._build_where()
|
||||
return sql + where_clause, params
|
||||
|
||||
|
||||
def build_update(self, data):
|
||||
columns = ", ".join(f"{k} = ?" for k in data.keys())
|
||||
sql = f"UPDATE {self.table} SET {columns}"
|
||||
if self._where:
|
||||
conditions = " AND ".join(f"{k} = ?" for k in self._where.keys())
|
||||
sql += f" WHERE {conditions}"
|
||||
params = list(data.values()) + list(self._where.values())
|
||||
return sql, params
|
||||
where_clause, where_params = self._build_where()
|
||||
params = list(data.values()) + list(where_params)
|
||||
return sql + where_clause, params
|
||||
|
||||
|
||||
def build_delete(self):
|
||||
sql = f"DELETE FROM {self.table}"
|
||||
if self._where:
|
||||
conditions = " AND ".join(f"{k} = ?" for k in self._where.keys())
|
||||
sql += f" WHERE {conditions}"
|
||||
return sql, list(self._where.values())
|
||||
where_clause, params = self._build_where()
|
||||
return sql + where_clause, params
|
||||
|
||||
|
||||
def first(self):
|
||||
|
Loading…
Reference in New Issue
Block a user