簡體   English   中英

做<cassandraresult> .all() 在使用時擦除數據,同時在 Python 中使用 Cassandra?</cassandraresult>

[英]Does <CassandraResult>.all() wipe data on use, while using Cassandra in Python?

表格內容,

# Insert stuff into the table
query = 'insert into music_lib (year, artist_name, album_name) values (%s, %s, %s)'
try:
    session.execute(query, (2010, 'Linkin Park', 'A Thousand Suns'))
    session.execute(query, (2012, 'Linkin Park', 'Living Things'))
except Exception as e:
    print(e)

我的查詢是這樣的,

try:
    rows = session.execute('SELECT * FROM MUSIC_LIB')
except Exception as e:
    print(e)

當我第一次執行rows.all()時,我得到了結果,

[Row(year=2010, artist_name='Linkin Park', album_name='A Thousand Suns'),
 Row(year=2012, artist_name='Linkin Park', album_name='Living Things')]

但是當我再次執行rows.all()時,我得到一個空白 output, []

調用 rows.all() 時數據是否會被擦除?

當您執行session.execute時,它會返回ResultSet object ,即從 Cassandra 接收到的數據的迭代器,這些結果是分頁的。 但是數據並沒有存儲在memory中用於隨機訪問,所以當你迭代時,你會跳到下一條記錄,並且可能不會返回到上一條。

當您調用all (對於大數據集來說很危險)時,它基本上是在調用list(result_set) ,在內部對所有行執行迭代。 但是當你第二次調用它時,迭代器已經用完了,你會收到空列表。 為防止這種情況,您需要將第一次調用all結果保存在某處。

我通過入門文檔向 go 推薦,並閱讀最佳實踐,例如使用准備好的語句等。另外,請注意表中的select * from table是 Z7BFCC746DD3AE3853C4F0EF95ZE 的反模式足夠大的數據集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM