我有一个SQLite 3数据库(db
),就像这个简化的例子一样:
CREATE TABLE user(id integer primary key, name text);
INSERT INTO "user" VALUES(1,'user1');
INSERT INTO "user" VALUES(2,'user2');
如果我输入.dump
,sqlite会将这些语句包装在一个事务中,并将它们写入先前用db.sql
定义的文件.output
。如果我需要将数据导入空数据库,这很好。
我希望能够将用户数据导入到定义了其他用户的其他数据库。如果我尝试,我很可能得到这样的东西(因为id可能已经在目标数据库中使用):
Error: near line 4: PRIMARY KEY must be unique
Error: near line 5: PRIMARY KEY must be unique
我的方法:
id
列(仅提及name
),但此方法无法扩展,因为我想自动化这个过程。我缺少任何简单或更优雅的方法吗? sqlite3
将在现实世界问题中从Bash脚本运行。
答案 0 :(得分:2)
您可以自动调整(但这仍然需要您知道表格结构):
$ (echo ".mode insert"; echo "SELECT name FROM user;") | \
sqlite3 my.db | \
sed -e 's/^INSERT INTO table /INSERT INTO user(name) /'
INSERT INTO user(name) VALUES('user1');
INSERT INTO user(name) VALUES('user2');