psequel
psequel copied to clipboard
Improve query builder model and query result model
- [ ] Validate query using postgres parser
- [ ] Optimnize the query building into a separate service (allow build select, update and delete query)
- [x] Optimize
Relationclass to better handle query result data
class SQLQueryBuilder:
def __init__(self, table_name):
self.table_name = table_name
self.query = ""
self.where_clauses = []
self.order_by = ""
self.limit = ""
def select(self, columns):
self.query = f"SELECT {', '.join(columns)} FROM {self.table_name}"
return self
def where(self, column, operator, value):
where_clause = f"{column} {operator} '{value}'"
self.where_clauses.append(where_clause)
return self
def order_by(self, column, order="ASC"):
self.order_by = f"ORDER BY {column} {order}"
return self
def limit(self, limit_value):
self.limit = f"LIMIT {limit_value}"
return self
def build(self):
query = self.query
if self.where_clauses:
query += " WHERE " + " AND ".join(self.where_clauses)
if self.order_by:
query += " " + self.order_by
if self.limit:
query += " " + self.limit
return query
# Example usage
query_builder = SQLQueryBuilder("users")
query = query_builder.select(["name", "email"]) \
.where("age", ">", 25) \
.where("city", "=", "New York") \
.order_by("name") \
.limit(10) \
.build()
print(query)
https://death.andgravity.com/query-builder-why#intermission-scrolling-window-queries
https://death.andgravity.com/own-query-builder
Can be solved by complete #86, which have a proper sql client and types by default