sqlite3只写入浮点numpy数组而不是整数数组

Dav*_*jad 4 python sqlite numpy

我能够将具有浮点数的Numpy数组保存到sqlite3,但不能保存带整数的数组:

import sqlite3
import numpy as np

db = sqlite3.connect('database.db')
database = db.cursor()

database.execute("CREATE TABLE table_name " 
     "(round INT, id INT, PRIMARY   KEY(round, id))")

row_to_write = np.array([1])
dtype = str(row_to_write.dtype)
if dtype.startswith('float'):
    database.execute("ALTER TABLE table_name ADD data FLOAT;")
elif dtype.startswith('int'):
    database.execute("ALTER TABLE table_name ADD data INTEGER;")

insert_str = "INSERT INTO table_name (round, id, data) VALUES (0, 0, ?);"
database.execute(insert_str, row_to_write)
Run Code Online (Sandbox Code Playgroud)

结果是:

InterfaceError: Error binding parameter 0 - probably unsupported type.
Run Code Online (Sandbox Code Playgroud)

如果我指定一个浮点数组,可以工作 row_to_write = np.array([1.1])

Sin*_*ion 8

Numpy正在使用一些自定义整数数据类型来有效地将数据打包到内存中.由于sqlite不熟悉这些类型,因此您必须事先告诉它如何处理它们:

>>> for t in (np.int8, np.int16, np.int32, np.int64,
...           np.uint8, np.uint16, np.uint32, np.uint64):
...     sqlite3.register_adapter(t, long)
... 
>>> cur.execute("insert into foo(bar) values(?)", np.array([1]))
<sqlite3.Cursor object at 0x027A7620>
Run Code Online (Sandbox Code Playgroud)