psequel icon indicating copy to clipboard operation
psequel copied to clipboard

Improve query builder model and query result model

Open ppvan opened this issue 1 year ago • 2 comments

  • [ ] Validate query using postgres parser
  • [ ] Optimnize the query building into a separate service (allow build select, update and delete query)
  • [x] Optimize Relation class 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)

ppvan avatar May 23 '24 10:05 ppvan

https://death.andgravity.com/query-builder-why#intermission-scrolling-window-queries

ppvan avatar May 24 '24 01:05 ppvan

https://death.andgravity.com/own-query-builder

ppvan avatar May 24 '24 01:05 ppvan

Can be solved by complete #86, which have a proper sql client and types by default

ppvan avatar Oct 02 '24 06:10 ppvan