我是新来的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()
试过这些:
c.execute("INSERT INTO PMU VALUES (?)", row_to_write)
ERROR: OperationalError: table PMU has 50 columns but 1 values were supplied
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
正确的方法是什么?在
您需要指定列的名称。Sqlite不会帮你猜的。在
还请注意,如果行的列数可变,则可能需要重新考虑数据库模式。通常每一行应该有一个固定的列数,并且可变性表现为插入的行数,而不是使用的列数。在
例如,您可能只需要一个额外的列,它的值是50个名称中的一个(以前是列名)。
row_to_write
中的每个值都有自己的行,对于每一行,您将有两列:值和列的名称。在假设您的
row_to_write
的项数与PMU
的列数完全相同,那么可以使用str.join
:','.join(['?']*len(row_to_write))
轻松地创建一个?
标记的字符串相关问题 更多 >
编程相关推荐