如何使用 Python3 和 SQlite3 将 3 个列表写入 6 列
How to write 3 lists to 6 columns with Python3 and SQlite3
我需要用 sqlite3 将包含值对的 3 个列表写入 6 列。
my_list = ['a','1','b','2','c','3','d','4']
my_list2 = ['e','5','f','6','g','7','h','8']
my_list3 = ['i','9','j','10','k','11','l','12']
像这样:
| a | 1 | e | 5 | i | 9 |
| b | 2 | f | 6 | j | 10|
| c | 3 | g | 7 | k | 11|
| d | 4 | h | 8 | l | 12|
我需要将每一对插入到彼此相邻的 .db 中。我可以使用成对函数来执行此操作,并为单个列表执行许多操作。
成对函数:
def pairwise(iterable):
iterable = iter(iterable)
return zip(iterable, iterable)
执行多个适用于一个列表的代码:
cursor.executemany('INSERT INTO mytable(column1, column2) VALUES (?,?)', pairwise(my_list))
connection.commit()
每当我尝试同时通过其他列表时:
cursor.executemany('INSERT INTO mytable(column1, column2, column3, column4, column4, column6) VALUES (?,?,?,?,?,?)',pairwise(my_list),pairwise(my_list2),pairwise(my_list3))
conn.commit()
我收到一条错误消息:
TypeError: function takes exactly 2 arguments (4 given)
executemany()
可以采用 an 序列迭代器(例如元组)作为参数,但是当您编写
pairwise(my_list),pairwise(my_list2),pairwise(my_list3)
这为您提供了 三个 个元组迭代器,而不是一个组合的元组迭代器。它不合并列。
这是合并列的一种方法:
def concat_columns(*row_lists):
return (tuple(chain(*r)) for r in zip(*row_lists)
这使用 zip()
创建元组元组的迭代器,并使用 itertools.chain()
展平每一行。您的最终代码可能如下所示:
cursor.executemany(
'INSERT INTO mytable(column1, column2, column3, column4, column4, column6) VALUES (?,?,?,?,?,?)',
concat_columns(pairwise(my_list),pairwise(my_list2),pairwise(my_list3)))
我需要用 sqlite3 将包含值对的 3 个列表写入 6 列。
my_list = ['a','1','b','2','c','3','d','4']
my_list2 = ['e','5','f','6','g','7','h','8']
my_list3 = ['i','9','j','10','k','11','l','12']
像这样:
| a | 1 | e | 5 | i | 9 |
| b | 2 | f | 6 | j | 10|
| c | 3 | g | 7 | k | 11|
| d | 4 | h | 8 | l | 12|
我需要将每一对插入到彼此相邻的 .db 中。我可以使用成对函数来执行此操作,并为单个列表执行许多操作。
成对函数:
def pairwise(iterable):
iterable = iter(iterable)
return zip(iterable, iterable)
执行多个适用于一个列表的代码:
cursor.executemany('INSERT INTO mytable(column1, column2) VALUES (?,?)', pairwise(my_list))
connection.commit()
每当我尝试同时通过其他列表时:
cursor.executemany('INSERT INTO mytable(column1, column2, column3, column4, column4, column6) VALUES (?,?,?,?,?,?)',pairwise(my_list),pairwise(my_list2),pairwise(my_list3))
conn.commit()
我收到一条错误消息:
TypeError: function takes exactly 2 arguments (4 given)
executemany()
可以采用 an 序列迭代器(例如元组)作为参数,但是当您编写
pairwise(my_list),pairwise(my_list2),pairwise(my_list3)
这为您提供了 三个 个元组迭代器,而不是一个组合的元组迭代器。它不合并列。
这是合并列的一种方法:
def concat_columns(*row_lists):
return (tuple(chain(*r)) for r in zip(*row_lists)
这使用 zip()
创建元组元组的迭代器,并使用 itertools.chain()
展平每一行。您的最终代码可能如下所示:
cursor.executemany(
'INSERT INTO mytable(column1, column2, column3, column4, column4, column6) VALUES (?,?,?,?,?,?)',
concat_columns(pairwise(my_list),pairwise(my_list2),pairwise(my_list3)))