gpt4 book ai didi

python - 获取 postgresql 唯一日期的内存有效方式?

转载 作者:行者123 更新时间:2023-11-29 14:11:30 24 4
gpt4 key购买 nike

我有一个包含大约 3000 万个条目的数据库,这已经很多了,我预计除了处理更大的数据库条目会遇到麻烦外,别无他法。

但是使用 py-postgresql 和 .prepare() 语句我希望我可以在“yield”的基础上获取条目,从而避免用只有数据库的结果,我显然不能?

这是我到目前为止所得到的:

import postgresql
user = 'test'
passwd = 'test
db = postgresql.open('pq://'+user+':'+passwd+'@192.168.1.1/mydb')
results = db.prepare("SELECT time time FROM mytable")
uniqueue_days = []
with db.xact():
for row in result():
if not row['time'] in uniqueue_days:
uniqueue_days.append(row['time'])

print(uniqueue_days)

甚至在到达 if not row['time'] in uniqueue_days: 之前,我的内存就用完了,考虑到 result() 可能会获取,这并不奇怪循环之前的所有结果?有没有办法让 postgresql 库“分页”或将结果分批处理,例如每轮 60k,或者甚至可能重新处理查询以完成更多工作?

提前致谢!

编辑:应该提到数据库中的日期是 Unix 时间戳,我打算在将它们添加到 uniqueue_days< 之前将它们转换为 %Y-%m-%d 格式 列表。

最佳答案

如果您使用支持更好的 psycopg2 扩展,您可以在客户端游标或 fetchone 上使用循环,一次只获取一行,因为 psycopg2 使用服务器端门户来支持其光标。

如果 py-postgresql 不支持类似的东西,你总是可以明确地 DECLARE a cursor on the database sideFETCH rows from it progressively .我在文档中没有看到任何内容表明 py-postgresql 可以像 psycopg2 那样在协议(protocol)级别自动为您执行此操作。

通常您可以很容易地在数据库驱动程序之间切换,但是 py-postgresql 似乎不遵循 Python DB-API,因此测试它需要更多更改。我仍然推荐它。

关于python - 获取 postgresql 唯一日期的内存有效方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21572844/

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