gpt4 book ai didi

python - 通过 SQLAlchemy 查询时如何从 Python 过滤名称列表

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:12 25 4
gpt4 key购买 nike

我原来的查询是这样的

select table1.id, table1.value
from some_database.something table1
join some_set table2 on table2.code=table1.code
where table1.date_ >= :_startdate and table1.date_ <= :_enddate

在Python中保存为字符串。如果我这样做

x = session.execute(script_str, {'_startdate': start_date, '_enddate': end_date})

然后

x.fetchall()

会给我我想要的 table 。

现在的情况是,table2 在 Oracle 数据库中不再可用,而是在我的 python 环境中作为 DataFrame 可用。我想知道在这种情况下从数据库获取同一张表的最佳方法是什么?

最佳答案

您可以改用 IN 子句。

首先从 script_str 中删除 join:

script_str = """
select table1.id, table1.value
from something table1
where table1.date_ >= :_startdate and table1.date_ <= :_enddate
"""

然后,从数据框中获取代码:

codes = myDataFrame.code_column.values

现在,我们需要动态扩展 script_str 和查询参数:

param_names = ['_code{}'.format(i) for i in range(len(codes))]
script_str += "AND table1.code IN ({})".format(
", ".join([":{}".format(p) for p in param_names])
)

使用所有参数创建字典:

params = {
'_startdate': start_date,
'_enddate': end_date,
}
params.update(zip(param_names, codes))

并执行查询:

x = session.execute(script_str, params)

关于python - 通过 SQLAlchemy 查询时如何从 Python 过滤名称列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com