在 sqlite 中存储整数会导致 BLOB(二进制值),而不是 sqlite 中的 INTEGER。问题出在“Baujahr”列中的 INT。该表已创建。
CREATE TABLE "Objekt" ( `No` INTEGER NOT NULL UNIQUE, `Objekt_id` INTEGER,
`Strecke` TEXT, `Baujahr` INTEGER, `Eigentümer` TEXT, PRIMARY KEY(`No`) )
数据框和数据类型:
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