在sqlite中存储一个整数会导致在sqlite中使用BLOB(二进制值)而不是INTEGER。问题在于" Baujahr"柱。该表已创建。
CREATE TABLE "Objekt" ( `No` INTEGER NOT NULL UNIQUE, `Objekt_id` INTEGER,
`Strecke` TEXT, `Baujahr` INTEGER, `Eigentümer` TEXT, PRIMARY KEY(`No`) )
dataframe和dtypes:
id Strecke Baujahr Eigentümer Objekt_id
5 A23 1938 Fronz 0327
Objekt.dtypes
Strecke object
Baujahr int64
Eigentümer object
Objekt_id object
dtype: object
将DataFrame写入sqlite
stmt ="INSERT INTO Objekt (Objekt_id, Strecke, Baujahr, Eigentümer) VALUES (?, ?, ?, ?)"
c.execute(stmt, (Objekt.Objekt_id.values[0], Objekt.Strecke.values[0],
Objekt.Baujahr.values[0], Objekt.Eigentümer.values[0] ))
conn.commit()
Sqlite仅适用于INT 8,不适用于INT 32或INT64(CREATE TABLE中的定义BIGINT也无效)。所以我尝试使用这些转换进行转换
Objekt.Baujahr.astype(int)
Objekt.Baujahr.astype(np.int8)
Objekt.Baujahr = int(Objekt.Baujahr)
dtypes命令显示Baujahr仍然是int64 !!
我无法编辑数据库中的值,通过查询这些值,我得到了二进制文件。有什么想法吗?
Python 3.6.4,sqlite3 2.6.0,pandas 0.22.0
答案 0 :(得分:3)
由于某种原因,Sqlite不接受大于8字节的INT。因此,有必要添加以下语句。
sqlite3.register_adapter(np.int64, lambda val: int(val))
sqlite3.register_adapter(np.int32, lambda val: int(val))
sqlite中的文档在这一点上有点短。但它完美无缺。