我正在尝试将nodes.csv
文件导入sqlite3表 - link to file
这是我的代码 -
CREATE TABLE nodes (
id INTEGER PRIMARY KEY NOT NULL,
lat REAL,
lon REAL,
user TEXT,
uid INTEGER,
version INTEGER,
changeset INTEGER,
timestamp TEXT
);
.import nodes.csv nodes
我设法在没有主键指定的情况下导入此文件,但是一旦我将主键添加到id字段,它就会出现以下错误
nodes.csv:xxx: INSERT failed: datatype mismatch
表示文件中xxx
是行号的每一行。我是sqlite3的新手,非常感谢您对此事的见解。
答案 0 :(得分:1)
CSV文件包含字符串。您不能将字符串插入整数列。 (通常是SQLite uses dynamic typing,但是INTEGER PRIMARY KEY is special。)
导入临时表,然后将数据复制到真实表,同时将数字转换为实际数字:
CREATE TABLE nodes_temp(...);
.import nodes.csv nodes_temp
CREATE TABLE nodes(...);
INSERT INTO nodes
SELECT CAST(id AS INTEGER), CAST(lat AS REAL), ...
FROM nodes_temp;
答案 1 :(得分:0)
因为我使用python pandas提供了一种更简单的方法 - 归功于Tennessee Leeuwenburg
c_nodes = "CREATE TABLE nodes(id INTEGER PRIMARY KEY NOT NULL, lat REAL, lon REAL, user TEXT, uid INTEGER, \
version INTEGER, changeset INTEGER, timestamp TEXT);"
conn = sqlite3.connect('osm.db')
cursor = conn.cursor()
cursor.execute(c_nodes)
df_nodes = pd.read_csv('nodes.csv')
df_nodes.to_sql('nodes',conn, if_exists='append', index=False)