3

文字列のリスト/配列があります:

l = ['jack','jill','bob']

次に、Python用のslite3にテーブルを作成する必要があります。このテーブルを使用して、この配列を「Names」という列に挿入できます。各行に各名前の複数の行は必要ありません。上記のように配列を含む単一の行が必要であり、まったく同じ形式で配列を取得できるようにする必要があります。配列を要素としてデータベースに挿入するにはどうすればよいですか?db自体を作成するときに、配列のデータ型として何を宣言する必要がありますか?好き:

c.execute("CREATE TABLE names(id text, names ??)")

値を挿入するにはどうすればよいですか?好き:

c.execute("INSERT INTO names VALUES(?,?)",(id,l))

編集:私はとても愚かです。IDに複数のエントリを設定し、クエリを使用して関連するすべての名前を抽出できることに気づきました。とにかくありがとう!

4

3 に答える 3

6

モジュールを歌うなど、なんらかの方法で配列の文字列表現を生成する場合は、単一の文字列フィールドに配列を格納できpickleます。次に、その行を読むときに、それをアンピックすることができます。Pickleは、多くの異なる複雑なオブジェクト(すべてではない)を文字列に変換し、オブジェクトを復元できるようにします。しかし、それはおそらくあなたがやりたいことではありません(行を選択して配列の選択を解除する以外は、表のデータに対して何もできません。検索することはできません。

さまざまな長さ(または固定長ですが、類似したものの多くのインスタンス)が必要な場合は、それを1つの列または複数の列に入れたくないでしょう。水平方向ではなく垂直方向のもの。つまり、列については考えず、行について考えてください。任意の数のコンポーネントを含むベクトルを格納するには、テーブルが優れたツールです。

あなたが与える小さな詳細から説明するのは少し難しいですが、2番目のテーブルを作成し、最初のテーブルのすべての行にすべての名前を配置することを検討する必要があります。最初のテーブルには、2番目のテーブルにも使用できるキーが必要です。

c.execute("CREATE TABLE first_table(int id, varchar(255) text, additional fields)")
c.execute("CREATE TABLE names_table(int id, int num, varchar(255) name)")

これを使用すると、名前以外の情報をfirst_table格納し、名前の配列をに格納できます。とnames_table同じidように使用して、配列内のインデックス位置を格納します。その後、次のような操作を行うことで、アレイを元に戻すことができます。first_tablenum

SELECT name FROM names_table 
WHERE id=?
ORDER BY num

内の任意の行の名前の配列を読み取りますfirst_table

これは、配列をDBに格納するためのごく普通の方法です。

于 2012-07-18T14:05:46.257 に答える
2

これは行く方法ではありません。名前への外部キーを持つ名前用に別のテーブルを作成することを検討する必要があります。

于 2012-07-18T13:52:31.877 に答える
1

配列をpickle/marshal / jsonして、binary / varchar/jsonfieldとしてデータベースに保存できます。

何かのようなもの:

import json

names = ['jack','jill','bill']
snames = json.dumps(names)
c.execute("INSERT INTO nametable " + snames + ";")
于 2012-07-18T13:53:48.030 に答える