I have a codebase with an API to pass a SQL query to run for execution, but that same API does not provide a way to pass a variable. Meaning I do not get to pass a variable in the same scope as where the query runs:
class SampleClientClass(BaseExecutionAPI):
def __init__(self):
self.conn = duckdb.DuckDBPyConnection()
def _execute_queries(self):
qs = self._yield_queries()
for q in qs:
self.conn.sql(q)
def _yield_queries(self):
...
I have tried passing it as a class member instead (since I do not get to override or alter the _execute_queries
method) but that does not seem to work:
class MyTableCreationClass(BaseExecutionAPI):
def __init__(self, df: pd.DataFrame):
self.conn = duckdb.DuckDBPyConnection()
self.my_df = df
def _execute_queries(self):
qs = self._yield_queries()
for q in qs:
self.conn.sql(q)
def _yield_queries(self):
return [
f"""
INSERT INTO my_table BY NAME
SELECT * FROM \"self.my_df\"
"""
]
Which gives me the error:
Table with name self.my_df does not exist!
Is there a way to have DuckDB pick up class members at all, or does it only work with local variables?
You need to sign in to view this answers