我该怎么插入&检索数据列表到&从SQL数据库?

时间:2013-06-18 12:04:08

标签: python sql database

我有3个列表,每个列表包含SQL表中一列的所有数据。所有列表都是相同的长度。这就是我需要将数据插入表中的方法:

+---+------------+-------------+-------------+
|   |     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元素插入到列A中,依此类推BC。但也许这不是一个好方法,因为它不是表示数据的逻辑方式(所有A属性列表,BC),以及我稍后需要以不同的方式表示数据,我也应该这样插入。

2 个答案:

答案 0 :(得分:1)

您通常逐行插入数据,而不是逐列插入数据,因此最简单的方法是zip()三个列表首先...

>>> 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)

将数据插入数据库的确切方法取决于您正在使用的数据库后端。

答案 1 :(得分: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')]