gpt4 book ai didi

python - 在python中创建一个临时表以与sql表连接

转载 作者:行者123 更新时间:2023-11-28 17:23:49 29 4
gpt4 key购买 nike

我在 vertica 数据库 Mytable 中有以下数据:

+----+-------+
| ID | Value |
+----+-------+
| A | 5 |
| B | 9 |
| C | 10 |
| D | 7 |
+----+-------+

我正在尝试在 python 中创建查询以访问 vertica 数据库。在 python 中我有一个列表:

ID_list= ['A', 'C']

我想创建一个基本上将 MytableID_list 内联的查询,然后我可以进行 WHERE 查询。所以它基本上是这样的

SELECT *
FROM Mytable
INNER JOIN ID_list
ON Mytable.ID = ID_list as temp_table
WHERE Value = 5

我没有对数据库的写入权限,因此需要在本地创建表。还是有其他方法可以做到这一点?

最佳答案

如果您有一张小 table ,那么您可以按照 Tim 的建议创建一个列表。

不过,我更喜欢使用 Python 方式来完成此操作。我可能还会将 ID_list 设为 set 以防止重复等。

in_list = '(%s)' % ','.join(str(id) for id in ID_list)

或更好地使用绑定(bind)变量(取决于您使用的客户端,如果您正在处理一组整数,则可能不是绝对必要的,因为我无法想象用它注入(inject) sql 的方法):

in_list = '(%s)' % ','.join(['%d'] * len(ID_list)

并将您的 ID_list 作为参数列表发送给您的 cursor.execute。此方法是位置性的,因此您需要正确安排绑定(bind)参数。

如果您有一个非常非常大的列表...您可以创建一个本地临时文件并在使用 join 进行查询之前加载它。

CREATE LOCAL TEMP TABLE mytable ( id INTEGER );

COPY mytable FROM STDIN;
-- Or however you need to load the data. Using python, you'll probably need to stream in a list using `cursor.copy`

然后加入我的表。

我不会费心用很少的行数来做后者,因为开销太大。

关于python - 在python中创建一个临时表以与sql表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40169360/

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