I tried to create a wrapper class around an object which implements chaining (pypika queries) and realised it’s really really awkward to do.
Tried to add a simple .to_df() method to pypika queries, idea being every time we write a query, we’re going to make converting that object to a dataframe, so may as well make that explicit.
But because every step returns a pypika query object to make chaining work. You have to either manually overwrite every method individually, or do quite a lot of playing around with overwriting every method programatically.
This is what I tried:
class QueryWrapper(PostgreSQLQuery):
def __init__(self, postgres_engine, *args, **kwargs):
super().__init__(*args, **kwargs)
self.postgres_engine = postgres_engine
def to_df(self) -> pd.DataFrame:
sql_query = self.get_sql()
return self.postgres_engine.sql_to_dataframe(sql_query)