pup-py's picture
minimal working
82815c9
raw
history blame
960 Bytes
import base64
import duckdb
class Q(str):
UNSAFE = ["CREATE", "DELETE", "DROP", "INSERT", "UPDATE"]
def __init__(self, query: str):
self.is_safe = not any([cmd in query.upper() for cmd in self.UNSAFE])
def run(self, sql_engine=None):
try:
if sql_engine is None:
return self.run_duckdb()
else:
return self.run_sql(sql_engine)
except Exception as e:
pass
def run_duckdb(self):
return duckdb.sql(self)
def df(self, sql_engine=None):
result = self.run(sql_engine=sql_engine)
if result is None: return
result_df = result.df()
return result_df
@property
def base64(self):
return base64.b64encode(self.encode()).decode()
@classmethod
def from_base64(cls, b64):
"""Initializing from base64-encoded URL paths."""
return cls(base64.b64decode(b64).decode())