加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite导出带有列名

发布时间:2020-12-12 19:13:56 所属栏目:百科 来源:网络整理
导读:是否有任何SQLite命令或第三方工具允许数据库转储在INSERT INTO语句中包含列名称? 代替 INSERT INTO "MyTable" VALUES ('A','B'); 我想看 INSERT INTO "MyTable" (Column1,Column2) VALUES ('A','B'); SQLite中的.dump命令只提供第一个版本。 让我再来一个
是否有任何SQLite命令或第三方工具允许数据库转储在INSERT INTO语句中包含列名称?

代替

INSERT INTO "MyTable" VALUES ('A','B');

我想看

INSERT INTO "MyTable" (Column1,Column2) VALUES ('A','B');

SQLite中的.dump命令只提供第一个版本。

让我再来一个裂缝。

将列名和INSERT语句转储到文件。

sqlite> .output test.data
sqlite> pragma table_info(test);
sqlite> .dump test
sqlite> .quit

$ cat test.data
0|test_id|int|0||1
1|test_name|varchar(35)|0||0
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE test (test_id int primary key,test_name varchar(35));
INSERT INTO "test" VALUES(1,'Wibble');
INSERT INTO "test" VALUES(2,'Wobble');
INSERT INTO "test" VALUES(3,'Pernicious');
COMMIT;

现在运行这个awk脚本

/|/ {
  split($0,col_name,"|");
  column_names[++n] = col_name[2];
}
/INSERT INTO "[A-Za-z].*"/ {
  insert_part = match($0,/INSERT INTO "[A-Za-z].*"/);
  printf("%s ",substr($0,RSTART,RLENGTH));

  printf("(");
  for (i = 1; i <= n; i++) {
    if (i == 1) {
      printf("%s",column_names[i]);
    }
    else {
      printf(",%s",column_names[i]);
    }
  }
  printf(") ");

  values_part = substr($0,RLENGTH+1,length($0) - RSTART);
  printf("%sn",values_part);


}

我们得到

$ awk -f dump_with_col_names.awk test.data
INSERT INTO "test" (test_id,test_name)  VALUES(1,'Wibble');
INSERT INTO "test" (test_id,test_name)  VALUES(2,'Wobble');
INSERT INTO "test" (test_id,test_name)  VALUES(3,'Pernicious');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读