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'
接下来要尝试什么?
答案 0 :(得分:1)
文档字符串指定的read_sql_table
的第二个参数不应是连接对象,而应是创建该对象的URI(在您的情况下为“ oracle ...”字符串)。这是因为sqlalchemy引擎不可序列化也不是线程安全的,因此运行查询的任务需要创建自己的引擎本地版本。