【问题标题】:Dask Dataframe- read_sql_table - where conditionDask Dataframe- read_sql_table - where 条件
【发布时间】:2020-06-12 18:16:21
【问题描述】:

我只需要将 record_status 为“新”的行检索到 Dask Dataframe 中。

目前我在下面使用并创建如下熊猫数据框

cnx = create_engine('mysql+mysqlconnector://root:password@localhost/sshema',
    echo=False)
df_party = pd.read_sql('select  first_name, last_name from party where record_status = \'New\'', con=cnx)

我想做同样的事情并创建 Dask Dataframe。以下是我尝试过并且正在工作的内容。如何向此添加 where 条件以仅检索具有 record_status 'New' 的行

ddf_party = dd.read_sql_table('party','mysql+mysqlconnector://root:password@localhost/schema',
                            index_col='create_date', columns = ['first_name', 'last_name'])

提前致谢。

【问题讨论】:

    标签: dask


    【解决方案1】:

    dask.dataframe.read_sql_tabletable 参数支持 SQLAlchemy 表达式——虽然它并不漂亮:

    import sqlalchemy as sa
    
    sqluri = "mysql+mysqlconnector://root:password@localhost/schema"
    engine = sa.create_engine(sqluri)
    
    sa_meta = sa.MetaData()
    sa_table = sa.Table("party", sa_meta, autoload=True, autoload_with=engine)
    sa_query = sa.select([sa_table]).where(sa_table.c.record_status == "New")
    sa_columns = [sa_table.c.first_name, sa_table.c.last_name]
    
    ddf_party = dd.read_sql_table(sa_query, sqluri, index_col="create_date", columns=sa_columns)
    

    【讨论】:

    • 试过你的代码,得到错误“mysql.connector.errors.ProgrammingError: 1248 (42000): 每个派生表必须有自己的别名”。不确定,但似乎没有为 SQL 中的 index_col 列正确设置别名。
    • sa_query = sa.select([sa_table]).where(sa_table.c.record_status == "New").alias('foo')。这应该工作。
    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 2018-05-09
    • 2020-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    相关资源
    最近更新 更多