既存のテーブルに sqlite で何かを追加するにはどうすればよいですか
>>> rid
'26539249'
>>> for t in [(rid,("billy","jim"))]:
c.execute("insert into whois values (?,?)",t)
ジムに追加してリストを作成するにはどうすればよいですか? または、複数の値を持つことができるように追加する方法はありますか?
ここで推測しますが、私は間違っていると思います。
("billy", "jim")
データベースに列として挿入することはできません。これは意図的なものです。sqlite のような RDBMS の要点は、各フィールドが値のリストではなく、正確に 1 つの値を保持することです。他のユーザーと共有されている列の途中で検索することはできません。' に'jim'
基づいてテーブルを結合することはできません。'jim
本当にこれを行いたい場合は、複数の値を単一の文字列に変換し、読み取り時にそれらを元に戻す方法を選択する必要があります。json.dumps
/ json.loads
、repr
/ ast.literal_eval
、またはその他の適切と思われるものを使用できます。ただし、追加のコードは自分で作成する必要があります。その場合、データベースから実際のメリットを得ることはできません。だけを使用した方がよいでしょうshelve
。
だから、あなたはこれをしたくないと思います、そしてあなたは代わりに何をしたいのか知りたいのです.
スキーマが次のようになっていると仮定します。
CREATE TABLE whois (Rid, Names);
あなたが望むものは:
CREATE TABLE whois (Rid);
CREATE TABLE whois_names (Rid, Name, FOREIGN KEY(Rid) REFERENCES whois(Rid);
そして、挿入を行うには:
tt = [(rid,("billy","jim"))]
for rid, names in tt:
c.execute('INSERT INTO whois VALUES (?)', (rid,))
for name in names:
c.execute('INSERT INTO whois_names VALUES (?, ?)', (rid, name))
または(おそらく高速ですが、インターリーブほどではありません):
c.executemany('INSERT INTO whois VALUES (?)', (rid for rid, names in tt))
c.executemany('INSERT INTO whois_names VALUES (?, ?),
(rid, name for rid, names in tt for name in names))