1

既存のテーブルに sqlite で何かを追加するにはどうすればよいですか

>>> rid
'26539249'
>>> for t in [(rid,("billy","jim"))]:
c.execute("insert into whois values (?,?)",t)

ジムに追加してリストを作成するにはどうすればよいですか? または、複数の値を持つことができるように追加する方法はありますか?

4

2 に答える 2

1

ここで推測しますが、私は間違っていると思います。

("billy", "jim")データベースに列として挿入することはできません。これは意図的なものです。sqlite のような RDBMS の要点は、各フィールドが値のリストではなく、正確に 1 つの値を保持することです。他のユーザーと共有されている列の途中で検索することはできません。' に'jim'基づいてテーブルを結合することはできません。'jim

本当にこれを行いたい場合は、複数の値を単一の文字列に変換し、読み取り時にそれらを元に戻す方法を選択する必要があります。json.dumps/ json.loadsrepr/ 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))
于 2013-10-09T01:10:00.377 に答える