【问题标题】:Python pd.read_sql where cause parametersPython pd.read_sql where 参数
【发布时间】:2018-06-06 20:47:43
【问题描述】:

用例: 我们有嵌套查询,我们的表有 10 到 2000 万行。这里我们的目的是通过智能过滤器减少查询 CPU 时间

我喜欢通过其他数据框列名过滤我在 pd.read_sql 中的列。这可能吗?

第 1 步:df1 数据框 age1 和 age3 是我未来用于 pd.read_sql 的过滤列

raw_data1 = {'age1': [23,45,21],'age2': [10,20,50], 'age3':['forty','fortyone','fortyfour']}
    df1 = pd.DataFrame(raw_data1, columns = ['age1','age2','age3'])
    df1

Step2:我喜欢从df1数据框上方取age1,想在下面的pd.read_sql中使用来获取item1数据框

item1 = pd.read_sql("""
SELECT * from [dbo].[ITEM]
where item_age1 = df1.age1
""", conn)

Step3:我喜欢从df1数据框上方取age3,想在下面的pd.read_sql中使用来获取item2数据框

item2 = pd.read_sql("""
SELECT * from [dbo].[ITEM]
where item_age3 = df1.age3
""", conn)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用参数化查询:

    item2 = pd.read_sql("""
    SELECT * from [dbo].[ITEM]
    where item_age3 IN ({})
    """.format(','.join('?'*len(df1.age3))), conn, 
    params=list(df1.age3))
    

    根据数据库后端,此语法可能使用'%s' 或%(name)s 而不是'?'。有关详细信息,请参阅 PEP249 paramstyle。

    【讨论】:

    • 谢谢。我正在使用 MS-SQL 服务器,并且给定的逻辑确实工作得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多