5
numpy整数オブジェクトの値をpython 3のデータベースに挿入する正しい方法は何ですか? python 2.7でnumpyの数値データ型は、sqliteのにきれいに挿入し、彼らは、Python 3numpyの整数型を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とシームレスに動作しないのはなぜですか? sqlite3のドキュメントによると
numpyの整数型は、(それの '.item()'値)の数だけのバイト表現ではありません。 1つの要素、0d、配列とほぼ同じオブジェクトです。だから、私はあなたがデータベースに溜め込まれた栄光の中でそれを保存することはできないと思います。その整数値を保存することもできますし、完全なnumpyオブジェクトではなく、同等のバイトを保存することもできます。 'sqlite3'にユーザ定義のオブジェクトインスタンスを保存する方法はありますか? – hpaulj
[MessagePack](http://msgpack.org/)(BLOBタイプをターゲットにする)のように、常に怖いピクルアプローチ(TEXTタイプをターゲットにする)、またはより近代的でバイナリベースのものがあります。 – sascha
'100 'の代わりに' np.int64(100) 'を保存するとどのような利点がありますか?フェッチ中に回復できなかった有用な情報はありますか? SQLAlchemyのようなモジュールがSQLオブジェクト・インタフェースをどのように処理するかを見ることができます。 – hpaulj