Dask read_sql_table引发错误AttributeError:'Connection'对象没有属性'_instantiate_plugins'

时间:2019-08-11 18:33:34

标签: python oracle dask

from sqlalchemy import create_engine
sql_engine = create_engine('oracle+cx_oracle://user:password@environment')
connection = sql_engine.connect()
# works with PANDAS?
import pandas as pd
pd.read_sql_table('table', connection)

以上给出了预期的输出。现在是Dask ...

import dask.dataframe as dd
dd.read_sql_table('table', connection)

...给出...

  

-------------------------------------------------- ---------------------------- TypeError跟踪(最近的呼叫   最后)   ----> 1 dd.read_sql_table('qsi_run_info_int',connection)#,'hedis_version_key')

     

TypeError:read_sql_table()缺少1个必需的位置参数:   'index_col'

...并通过...添加列以建立索引...

dd.read_sql_table('table', connection, 'column_to_index_on')

...给予...

  

-------------------------------------------------- ---------------------------- AttributeError Traceback(最近一次调用   最后)   ----> 1 dd.read_sql_table('qsi_run_info_int',连接,'hedis_version_key')

     

〜.conda \ envs \ test_dask \ lib \ site-packages \ dask \ dataframe \ io \ sql.py在   read_sql_table(表,uri,index_col,除法,npartitions,限制,   列,bytes_per_chunk,head_rows,架构,元数据,engine_kwargs,   ** kwargs)        98提高ValueError(“必须指定要在其上进行分区的索引列”)        99 engine_kwargs = {}如果engine_kwargs为None   -> 100引擎= sa.create_engine(uri,** engine_kwargs)       101 m = sa.MetaData()       102 if isinstance(table,string_types):

     

〜.conda \ envs \ test_dask \ lib \ site-packages \ sqlalchemy \ engine__init __。py   在create_engine(* args,** kwargs)中       433策略= kwargs.pop(“ strategy”,default_strategy)       434策略= strategy.strategies [strategy]   -> 435返回strategy.create(* args,** kwargs)       436       437

     

〜.conda \ envs \ test_dask \ lib \ site-packages \ sqlalchemy \ engine \ strategies.py   在create(self,name_or_url,** kwargs)中        54 u = url.make_url(name_or_url)        55   ---> 56个插件= u._instantiate_plugins(kwargs)        57        58 u.query.pop(“ plugin”,None)

     

AttributeError:“连接”对象没有属性   '_instantiate_plugins'

接下来要尝试什么?

1 个答案:

答案 0 :(得分:1)

文档字符串指定的read_sql_table的第二个参数不应是连接对象,而应是创建该对象的URI(在您的情况下为“ oracle ...”字符串)。这是因为sqlalchemy引擎不可序列化也不是线程安全的,因此运行查询的任务需要创建自己的引擎本地版本。