python sqlite:给sqlite数据库写一个大的列表

时间:2014-09-26 20:09:05

标签: python python-2.7 sqlite

我是sqlite的新手,我认为这个问题应该在之前得到解答,但我还没有找到答案。 我有一个大约50个元素的列表,我需要写入一个50列的sqlite数据库。 浏览了文档@ https://docs.python.org/2/library/sqlite3.html,但在示例中,值是由?指定的? (因此,对于写入3个值,指定3?

示例代码:

row_to_write = range(50) conn = sqlite3.connect('C:\sample_database\sample_database') c = conn.cursor()

试过这些:

接近1

c.execute("INSERT INTO PMU VALUES (?)", row_to_write) ERROR: OperationalError: table PMU has 50 columns but 1 values were supplied

方法2 ...尝试编写生成器以迭代列表

def write_row_value_generator(row_to_write): for val in row_to_write: yield (val,) c.executemany("INSERT INTO PMU VALUES (?)", write_row_value_generator(row_to_write)) ERROR: OperationalError: table PMU has 50 columns but 1 values were supplied 这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

您需要指定列的名称。 Sqlite不会为你猜那些。

columns = ['A', 'B', 'C', ...]
n = len(row_to_write)
sql = "INSERT INTO PMU {} VALUES ({})".format(
    ', '.join(columns[:n]) , ', '.join(['?']*n))

c.execute(sql, row_to_write)

另请注意,如果您的行具有可变数量的列,那么您可能需要重新考虑数据库架构。通常每行应该有固定数量的列,并且可变性表示插入的行数,而不是使用的列数。

例如,您可能只需要一个额外的列,而不是50列,其值为50个名称之一(以前是列名)。 row_to_write中的每个值都有自己的行,对于每一行,您将有两列:列的值和名称。

答案 1 :(得分:0)

假设您的row_to_writePMU列的列数完全相同,则可以使用?轻松创建str.join标记字符串:{{1 }}

','.join(['?']*len(row_to_write))