Module query.database in plugin tabular v0.5.1
Execute a sql query against a (sqlite) database.
Author(s) | Markus Binsteiner (markus@frkl.io) |
Tags | tabular |
Python class | kiara_plugin.tabular.modules.db.QueryDatabaseModule |
Module configuration options
Configuration class: kiara_plugin.tabular.modules.db.QueryDatabaseConfig
Name | Description | Type | Required? | Default |
---|---|---|---|---|
constants | Value constants for this module. | object | false | null |
defaults | Value defaults for this module. | object | false | null |
query | The query. | anyOf: [{'type': 'string'}, {'type': 'null'}] | false | null |
Module source code
class QueryDatabaseModule(KiaraModule): """Execute a sql query against a (sqlite) database."""
_config_cls = QueryDatabaseConfig _module_type_name = "query.database"
def create_inputs_schema( self, ) -> ValueMapSchema:
result: Dict[str, Dict[str, Any]] = { "database": {"type": "database", "doc": "The database to query."} }
if not self.get_config_value("query"): result["query"] = {"type": "string", "doc": "The query to execute."}
return result
def create_outputs_schema( self, ) -> ValueMapSchema:
return {"query_result": {"type": "table", "doc": "The query result."}}
def process(self, inputs: ValueMap, outputs: ValueMap):
import pyarrow as pa
database: KiaraDatabase = inputs.get_value_data("database") query = self.get_config_value("query") if query is None: query = inputs.get_value_data("query")
# TODO: make this memory efficent
result_columns: Dict[str, List[Any]] = {} with database.get_sqlalchemy_engine().connect() as con: result = con.execute(text(query)) for r in result: for k, v in dict(r).items(): result_columns.setdefault(k, []).append(v)
table = pa.Table.from_pydict(result_columns) outputs.set_value("query_result", table)