teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

pythonによる回答を追記

2020/06/12 09:49

投稿

yymmt
yymmt

スコア1615

answer CHANGED
@@ -57,4 +57,37 @@
57
57
  2020-06-14|C|3
58
58
  2020-06-17|D|3
59
59
  ```
60
- と、新たに意図したレコードが追加されています。
60
+ と、新たに意図したレコードが追加されています。
61
+
62
+ #### pythonによる方法(回答欄での質問に対する返事)
63
+ PRIMARY KEYやUNIQUE制約を持ったテーブルに対して、pythonを使ってCSVファイルを追記する方法を示します。
64
+ 重要なことは`INSERT`の代わりに`INSERT OR IGNORE`を用いることです。
65
+
66
+ ```python
67
+ import sqlite3
68
+
69
+
70
+ def insert_csv(conn, filename):
71
+ with open(filename, "r") as f:
72
+ items = []
73
+ for line in f:
74
+ cols = line.strip().split(",")
75
+ items.append(cols)
76
+ cur = conn.cursor()
77
+ cur.executemany(
78
+ "INSERT OR IGNORE INTO hoge (date,type,value) VALUES (?,?,?)",
79
+ items,
80
+ )
81
+ conn.commit()
82
+
83
+
84
+ def main():
85
+ conn = sqlite3.connect("test.db")
86
+ insert_csv(conn, "test1.csv")
87
+ insert_csv(conn, "test2.csv")
88
+ conn.close()
89
+
90
+
91
+ if __name__ == "__main__":
92
+ main()
93
+ ```