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