Przeglądaj źródła

bug fix: readonly for duckdb

Steve Nyemba 4 miesięcy temu
rodzic
commit
30645e46bd
2 zmienionych plików z 12 dodań i 4 usunięć
  1. 9 3
      transport/sql/common.py
  2. 3 1
      transport/sql/duckdb.py

+ 9 - 3
transport/sql/common.py

@@ -13,7 +13,13 @@ class Base:
         self._port = None
         self._database = _args['database']
         self._table = _args['table'] if 'table' in _args else None
-        self._engine= sqa.create_engine(self._get_uri(**_args),future=True)
+        _uri = self._get_uri(**_args)
+        if type(_uri) == str :
+            self._engine= sqa.create_engine(_uri,future=True)
+        else:
+            
+            _uri,_kwargs = _uri
+            self._engine= sqa.create_engine(_uri,**_kwargs,future=True)
     def _set_uri(self,**_args) :
         """
         :provider   provider
@@ -64,8 +70,8 @@ class Base:
 
         @TODO: Execution of stored procedures
         """
-        if sql.lower().startswith('select') or sql.lower().startswith('with') :
-
+        if sql.strip().lower().startswith('select') or sql.strip().lower().startswith('with') or sql.strip().startswith('show'):
+            print (self._engine)
             return pd.read_sql(sql,self._engine) 
         else:
             _handler = self._engine.connect()

+ 3 - 1
transport/sql/duckdb.py

@@ -15,9 +15,11 @@ class Duck :
     def _get_uri(self,**_args):
         return f"""duckdb:///{self.database}"""
 class Reader(Duck,BaseReader) :
-    def __init__(self,**_args):
+    def __init__(self,**_args):        
         Duck.__init__(self,**_args)
         BaseReader.__init__(self,**_args)
+    def _get_uri(self,**_args):
+        return super()._get_uri(**_args),{'connect_args':{'read_only':True}}
 class Writer(Duck,BaseWriter):
     def __init__(self,**_args):
         Duck.__init__(self,**_args)