Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions src/earthkit/data/readers/sql.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from . import Reader


class SQLReader(Reader):

def __init__(self, source, sql_engine, sql, **kwargs):
super().__init__(source, sql_engine)
self._sql_engine = sql_engine
self._sql = sql

def mutate_source(self):
return self

def to_pandas(self, **kwargs):
import pandas as pd

conn = self._sql_engine.connect()
try:
df = pd.read_sql(self._sql, conn, **kwargs)
finally:
conn.close()

return df

def to_xarray(self, **kwargs):

return self.to_pandas().to_xarray(**kwargs)


def reader(source, path, *, magic=None, deeper_check=False, fwf=False, **kwargs):
return
29 changes: 29 additions & 0 deletions src/earthkit/data/sources/sql.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from ..readers.sql import SQLReader
from . import Source


def create_sqlalchemy_engine(backend, kwargs):
from sqlalchemy import create_engine

if backend == "sqlite":
return create_engine(f"sqlite:///{kwargs['path']}")
else:
raise NotImplementedError(f"Backend: {backend} is not implemented.")


class SQLSource(Source):

def __init__(self, backend, backend_kwargs, sql, **kwargs):
super().__init__(**kwargs)
sql_engine = create_sqlalchemy_engine(backend, backend_kwargs)
self._reader = SQLReader(self, sql_engine, sql, **kwargs)

def mutate(self):
source = self._reader.mutate_source()
if source not in (None, self):
source._parent = self
return source
return self


source = SQLSource
Loading