使用ddf.read_sql_表-dask时出现类型错误 如果可以传递包含查询ddf.read\u sql\u table的sqlalchemy文本 如文档中所述,当传递用于读取sql表的参数时,请参见TypeError
代码:使用ddf.read_sql_表-dask时出现类型错误 如果可以传递包含查询ddf.read\u sql\u table的sqlalchemy文本 如文档中所述,当传递用于读取sql表的参数时,请参见TypeError,dask,python-3.8,Dask,Python 3.8,代码: 从sqlalchemy.sql导入文本 从sqlalchemy.engine导入创建引擎 将dask.dataframe作为ddf导入 方言=“” SQL_驱动程序=“” 用户名=“” 密码=“” 主机名=“” 端口=“” SID=“” 引擎路径=方言+'++'+SQL驱动程序+'://'+用户名+':'+密码+'@'+主机名+':'+str(端口)+'/'+SID s=文本(“我的复杂sql查询”) df=ddf.read\u sql\u表(s,引擎路径,索引col='id',npar
从sqlalchemy.sql导入文本
从sqlalchemy.engine导入创建引擎
将dask.dataframe作为ddf导入
方言=“”
SQL_驱动程序=“”
用户名=“”
密码=“”
主机名=“”
端口=“”
SID=“”
引擎路径=方言+'++'+SQL驱动程序+'://'+用户名+':'+密码+'@'+主机名+':'+str(端口)+'/'+SID
s=文本(“我的复杂sql查询”)
df=ddf.read\u sql\u表(s,引擎路径,索引col='id',npartitions=10)
出现错误:
from sqlalchemy.sql import text
from sqlalchemy.engine import create_engine
import dask.dataframe as ddf
DIALECT = '<value>'
SQL_DRIVER= '<value>'
USERNAME= '<value>'
PASSWORD = '<value>'
HOSTNAME = '<value>'
PORT = '<value>'
SID = '<value>'
ENGINE_PATH = DIALECT + '+' + SQL_DRIVER + '://' + USERNAME + ':' + PASSWORD +'@' + HOSTNAME + ':' + str(PORT) + '/' + SID
s = text("My complicated sql query")
df = ddf.read_sql_table(s, ENGINE_PATH, index_col='id', npartitions=10)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/synology/data/ganesh/arun/code_jan_27/art_rematching/venv_3.8_50/lib/python3.8/site packages/dask/dataframe/io/sql.py”,第115行,在read_sql_表中
索引=表格。如果是INSTANCE(索引列,str),则列[索引列]为else索引列
TypeError:“方法”对象不可下标
因此dask目前不支持直接在文本机制中进行复杂查询(从v2021.02.0开始)。我的解决办法如下:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/synology/data/ganesh/arun/code_jan_27/art_rematching/venv_3.8_50/lib/python3.8/site-packages/dask/dataframe/io/sql.py", line 115, in read_sql_table
index = table.columns[index_col] if isinstance(index_col, str) else index_col
TypeError: 'method' object is not subscriptable
我也遇到了这个问题。运气好吗?我不再用达斯克了。我可能错了,但还有太多的事情要做。啊,我这方面肯定需要一些时间来适应。我确实为你的问题想出了一个解决办法——我会把它贴在回复中,以防你再回来。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/synology/data/ganesh/arun/code_jan_27/art_rematching/venv_3.8_50/lib/python3.8/site-packages/dask/dataframe/io/sql.py", line 115, in read_sql_table
index = table.columns[index_col] if isinstance(index_col, str) else index_col
TypeError: 'method' object is not subscriptable
from sqlalchemy import Table, Metadata, Column, Integer
import dask.dataframe as ddf
import multiprocessing
uri = f'{dialect}://{user}:{password}@{host}:{port}/{dbName}'
view = '[NAME_OF_VIEW]'
schema = '[NAME_OF_SCHEMA]'
pkey = '[PRIMARY_KEY_COLUMN]'
myview = Table(view, Metadata(schema=schema), Column(pkey, Integer, primary_key=True))
df = ddf.read_sql_table(table=myview, uri=uri, index_col=pkey, schema=schema, npartitions=multiprocessing.cpu_count()*3)