回答編集履歴
1
pythonによる回答を追記
test
CHANGED
@@ -117,3 +117,69 @@
|
|
117
117
|
```
|
118
118
|
|
119
119
|
と、新たに意図したレコードが追加されています。
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
#### pythonによる方法(回答欄での質問に対する返事)
|
124
|
+
|
125
|
+
PRIMARY KEYやUNIQUE制約を持ったテーブルに対して、pythonを使ってCSVファイルを追記する方法を示します。
|
126
|
+
|
127
|
+
重要なことは`INSERT`の代わりに`INSERT OR IGNORE`を用いることです。
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
```python
|
132
|
+
|
133
|
+
import sqlite3
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
def insert_csv(conn, filename):
|
140
|
+
|
141
|
+
with open(filename, "r") as f:
|
142
|
+
|
143
|
+
items = []
|
144
|
+
|
145
|
+
for line in f:
|
146
|
+
|
147
|
+
cols = line.strip().split(",")
|
148
|
+
|
149
|
+
items.append(cols)
|
150
|
+
|
151
|
+
cur = conn.cursor()
|
152
|
+
|
153
|
+
cur.executemany(
|
154
|
+
|
155
|
+
"INSERT OR IGNORE INTO hoge (date,type,value) VALUES (?,?,?)",
|
156
|
+
|
157
|
+
items,
|
158
|
+
|
159
|
+
)
|
160
|
+
|
161
|
+
conn.commit()
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
def main():
|
168
|
+
|
169
|
+
conn = sqlite3.connect("test.db")
|
170
|
+
|
171
|
+
insert_csv(conn, "test1.csv")
|
172
|
+
|
173
|
+
insert_csv(conn, "test2.csv")
|
174
|
+
|
175
|
+
conn.close()
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
if __name__ == "__main__":
|
182
|
+
|
183
|
+
main()
|
184
|
+
|
185
|
+
```
|