0

3 つのリストがあり、それぞれに SQL テーブルの 1 つの列のすべてのデータが含まれています。リストはすべて同じ長さです。これは、データをテーブルに挿入する方法です。

+---+------------+-------------+-------------+
|   |     A      |      B      |      C      |
+---+------------+-------------+-------------+
| 1 | listA[0]   | listB[0]    | listC[0]    |
| 2 | listA[1]   | listB[1]    | listC[1]    |
| 3 | listA[2]   | listB[2]    | listC[2]    |
| n | listA[n]   | listB[n]    | listC[n]    |
+---+------------+-------------+-------------+

私はPythonを使用しています。すべてのリストがありますが、データを SQL テーブルに挿入する最善の方法がわかりません。

後で、クエリをA列データに一致させ、一致するものを検索して、データを取得する必要があります。一致する場合は、すべての行データを取得し、3 つのプロパティを持つオブジェクトを作成する必要があります。
A = listA[x], B = listB[x], C = listC[x]

そのためには Python で辞書を使用する必要があると言われましたが、そのほうがよいかどうかはわかりません。

私の質問は、この SQL データベースを使用する方法に基づいて、これらのデータのリストをテーブルに挿入する方法と、データを挿入するときと後でテーブルから取得するときにデータをどのように表現するかです。 ?

最初に、すべてのlistA要素を columnAに挿入するだけでよいBと考えましたCAしかし、それはデータ (すべてのプロパティ、BおよびCのリスト) を表す論理的な方法ではないため、これは良い方法ではないかもしれません。あまりにも。

4

2 に答える 2

1

通常、列ごとではなく行ごとにデータを挿入するので、zip()最初に 3 つのリストを挿入するのがおそらく最も簡単です...

>>> listA = [1, 2, 3]
>>> listB = ['a', 'b', 'c']
>>> listC = ['i', 'ii', 'iii']
>>> zip(listA, listB, listC)
[(1, 'a', 'i'), (2, 'b', 'ii'), (3, 'c', 'iii')]

...次に、その結​​果を...で繰り返すことができます

for row in zip(listA, listB, listC):
    cursor.execute('INSERT INTO ... VALUES (?, ?, ?)', row)

リストが膨大な場合は、itertools.izip()代わりに使用することをお勧めします...

from itertools import izip

for row in izip(listA, listB, listC):
    cursor.execute('INSERT INTO ... VALUES (?, ?, ?)', row)

データを DB に挿入する正確な方法は、使用している DB バックエンドによって異なります。

于 2013-06-18T13:31:25.713 に答える
0

sqlite3 の使用:

import sqlite3
db = sqlite3.connect('foo.db')

テーブルの作成

db.execute('CREATE TABLE mydata (id INTEGER PRIMARY KEY, A, B, C)')

挿入する

db.execute('INSERT INTO mydata (A, B, C) VALUES (?, ?, ?)', 
    ('testA', 'testB', 'testC')
)    
db.commit()

取得中

result = db.execute('SELECT * FROM mydata WHERE A = ?', 
    ('testA',)
)
print result.fetchall()

出力:

[(1, u'testA', u'testB', u'testC')]
于 2013-06-18T12:56:45.100 に答える