私は約 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タイムスタンプであることに言及する必要があります。リスト%Y-%m-%d
に追加する前に、それらをフォーマットに変換するつもりuniqueue_days
です。