2017-01-02 91 views
1

写入.db文件我需要的,如信息的列表:把一个列表分成两人一组,并将其与sqlite3的

my_list = ['a','1','b','2','c','3','d','4'] 

我需要这个信息对写入在两个单独的列.db文件与sqlite3。

| a | 1 | 
| b | 2 | 
| c | 3 | 
| d | 4 | 

的sqlite3不会让我传递一个列表作为参数,所以我累了:

connection = sqlite3.connect('mytest.db') 
cursor = conn.cursor 
cursor.execute('CREATE TABLE IF NOT EXISTS test(c1 TEXT, c2 TEXT)') 

for i in my_list[0:len(my_list):2]: 
    cursor.execute(INSERT INTO test (c1) VALUES (?)',(i,)) 
    connection.commit 

for i in my_list[1:len(my_list):2]: 
    cursor.execute(INSERT INTO test (c2) VALUES (?)',(i,)) 
    connection.commit 

然而,这是使表看起来像这样:

| a | null | 
| b | null | 
| c | null | 
| d | null | 
| null | 1 | 
| null | 2 | 
| null | 3 | 
| null | 4 | 

回答

1

你可以用pairwise iterationexecutemany()

def pairwise(iterable): 
    a = iter(iterable) 
    return zip(a, a) 

my_list = ['a','1','b','2','c','3','d','4'] 
cursor.executemany(""" 
    INSERT INTO 
     test (c1, c2) 
    VALUES 
     (?, ?)""", pairwise(my_list)) 
connection.commit() # note: you need to call the commit method 
+0

'literator = iter(my_list)'和'zip(literator,literator)'会更有效率,空间 – inspectorG4dget

+0

@ inspectorG4dget你是对的,只是想证明这个想法..谢谢! – alecxe

+0

我很困惑与检查员代码有什么不同。 –