File size: 960 Bytes
82815c9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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())