python sqlite:写一个大列表到sqlite数据库
我是新来的sqlite和我认为这个问题应该已经回答之前,但我还没有能够找到答案。 我有一个约50个元素的列表,我需要写入一个sqlite数据库与50列。 检查了文档@https://docs.python.org/2/library/sqlite3.html,但在示例中,值由? ?(因此对于写入3个值,3被指定python sqlite:写一个大列表到sqlite数据库
示例代码:
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
这样做的正确方法是什么?
假设你row_to_write
有相同数量的项目为PMU
有列,你可以很容易地使用str.join
创建?
马克的字符串:','.join(['?']*len(row_to_write))
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute("create table PMU (%s)" % ','.join("col%d"%i for i in range(50)))
row_to_write = list(range(100,150,1))
row_value_markers = ','.join(['?']*len(row_to_write))
c.execute("INSERT INTO PMU VALUES (%s)"%row_value_markers, row_to_write)
conn.commit()
试过这个并且工作!正是我正在寻找...谢谢一吨 – anna1983 2014-09-26 21:10:05
您需要指定列的名称。 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
中的每个值都有其自己的行,并且对于每行都会有两列:值的列和名称。
请提供证明该错误的短,完整的程序以便其他人可能会重现您的问题。 – 2014-09-26 20:19:36