5
在Python 3中將numpy整數對象的值插入到數據庫中的正確方法是什麼?在Python 2.7 numpy的數值數據類型插入到乾淨sqlite的,但他們沒有在Python 3將numpy整數類型插入到python3的sqlite中
import numpy as np
import sqlite3
conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE foo (id INTEGER NOT NULL, primary key (id))")
conn.execute("insert into foo values(?)", (np.int64(100),)) # <-- Fails in 3
的np.float類型似乎都在2和3
conn.execute("insert into foo values(?)", (np.float64(101),))
依然工作得很好在Python 2中,numpy標量整數數據類型不再是int的實例,即使將整數值浮點數轉換爲整數。
isinstance(np.int64(1), int) # <- true for 2, false for python 3
這就是爲什麼dbapi不再能夠與numpy無縫協作的原因嗎?
一個numpy的整數類型不僅是數量的字節表示(它的'.item()'值);是一個對象,幾乎與單個元素0d,數組相同。所以我不認爲你可以將它保存在數據庫中的所有榮譽之中。你可以保存它的整數值,或者相當於一些字節,但不能保存完整的numpy對象。 'sqlite3'中有沒有關於保存用戶定義對象實例的內容? – hpaulj
總是有一些嚇人的pickle-approach(針對TEXT類型),或者像[MessagePack](http://msgpack.org/)(針對BLOB類型)的更現代和基於二進制的東西。 – sascha
保存'np.int64(100)'而不是'100'有什麼好處?是否有一些有用的信息在抓取過程中無法恢復?你可以看看SQLAlchemy這樣的模塊如何處理sql對象接口。 – hpaulj