我從Oracle數據庫使用cx_oracle拉出大數據使用下面的示例腳本:內存管理
from cx_Oracle import connect
TABLEDATA = []
con = connect("user/[email protected]")
curs = con.cursor()
curs.execute("select * from TABLE where rownum < 100000")
for row in curs:
TABLEDATA.append([str(col) for col in list(row)])
curs.close()
con.close()
問題,在列表存儲的是,它結束了約800-900萬桶的RAM使用。 我知道我可以改爲將其保存在文件中,而不是保存在列表中,但我使用此列表使用QTABLEVIEW和QABSTRACTTABLE MODEL來顯示錶格。
是否有任何替代或更有效的方式,我可以最大限度地減少存儲器使用這些數據並使用它來顯示我的表?
很久以前我第一次嘗試使用QOCI連接,但它不適用於我。我所有的就是dsn,使用,傳遞數據庫。 cx_Oracle easilu使用connect(「user/pass @ dsn」)進行連接。事實上,這些信息將由用戶輸入來設置數據庫連接。我從來沒有能夠使它工作,這就是爲什麼我必須首先切換到QAbstractTableModel的原因。 –
我會嘗試重新審視它,看看你是否可以使它工作。重新實現行爲不會很有趣!你見過這個嗎?從http://qt-project.org/doc/qt-4.8/qsqldatabase.html#setDatabaseName:「對於QOCI(Oracle)驅動程序,數據庫名稱是TNS服務名稱。」儘管閱讀http://www.qtcentre.org/threads/42918-QOCI-plugin-with-Oracle-RAC表明如果配置正確,您可以使用DSN名稱。我不太瞭解Oracle數據庫,對不起。 –
如果你想重新實現標準qt類的行爲,但是使用cx_oracle,要麼是子類'QAbstractTableModel',要麼重新實現'QSqlQueryModel'的方法(http://qt-project.org/doc/qt-4.8/qsqlquerymodel)。 html),或者你可以嘗試編寫你自己的QSql驅動程序(參見:http://qt-project.org/doc/qt-4.8/sql-driver.html#how-to-write-yourown -database-driver) –