0

我有 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元素插入到 columnA中,以此类推Band C。但也许这不是一个好方法,因为它不是表示数据的逻辑方式(所有A属性的列表,B's 和C's),而且我以后需要以不同的方式表示数据,我应该插入它方式也是。

4

2 回答 2

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)

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

于 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 回答