我正在尝试将 SQLAlchemy 表达式与 dask 的 read_sql_table 一起使用,以便关闭通过连接和过滤几个不同表创建的数据集。该文件表明,这应该是可能的。
(下面的示例不包括任何连接,因为复制问题不需要它们。)
我构建了我的连接字符串,创建了一个 SQLAlchemy 引擎和与我的数据库中的表相对应的表。(我正在使用 PostgreSQL。)
import dask.dataframe as dd
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy import Column, MetaData, Table
from sqlalchemy.sql import select
username = 'username'
password = 'password'
server = 'prod'
database = 'my_db'
connection_string = f'postgresql+psycopg2://{username}:{password}@{server}/{database}'
engine = create_engine(connection_string)
metadata = MetaData()
t = Table('my_table', metadata,
Column('id'),
schema='my_schema')
我能够构建一个选择并将它与 SQLAlchemy 一起使用,没有问题
>>> s = select([t]).limit(5)
>>> rp = engine.execute(s)
>>> rp.fetchall()
[(3140757,), (3118225,), (3156070,), (3193075,), (3114614,)]
我还可以将 SQLAlchey 选择提供给熊猫的 read_sql,它工作正常
>>> pd.read_sql(s, connection_string)
id
0 3140757
1 3118225
2 3156070
3 3193075
4 3114614
但是,当我将相同的选择传递给 dask 时,我收到了 ProgrammingError。它表明dask正在转身并调用pandas.read_sql,所以你会认为它应该工作,但显然不是。
白猪掌柜的
慕婉清6462132
跃然一笑
相关分类