2016-02-05 13 views
1
的一列

我在被格式化爲讀取文件如下:Python中,存儲的列表,並插入到表

12  #block belonging to ID1 
78 
60 
98 
7 

65  #block belonging to ID2 
14 
22 

每個塊由一個空行終止並且每個塊屬於一個ID。我想把這個信息插入一個ID_from(這是塊的ID所屬的ID_to)和ID_to(塊內的數字)兩個字段的表中。因此,對於前:

ID_from ID_to 
1   12 
1   78 
1   60 
1   98 
1   7 
2   65 
2   14 
2   22 

我有一個複合主鍵是這兩個領域的結合,讓我重複相同的ID在ID_from列。這是我的代碼相關的問題:

citations = line 
my_list = [] 
     my_list.append(citations) 
     my_list = " ".join(my_list) 

db1.execute('''INSERT INTO citations(
         ID_from, ID_to) VALUES(%s,%s)''', 
         (ID, my_list)) 

conn.commit() 

(ID已被先前在代碼中定義)。我認爲是已使用此代碼實現創建列表 - citations_collect []和所附的塊的每一行的列表 - 本質上應該被插入ID_to列中的所有的值的列表。電流輸出我得到的只是在每個塊的最後一個值及其對應的塊ID出現在IE:

ID_from ID_to 
1   7 
2   22 

我的猜測是,我應該把我的執行查詢成一個圈,但我不能某些環路應該由什麼組成。我試圖用join函數做的是每塊的值存儲在名單上用空格隔開一行並且本來簡單的插入表中,但我處理不當做出我的輸出差異。 我是新來的蟒蛇和MySQL,所以我很感激任何反饋!

回答

0

這是很難推薦一下,沒有看到你的完整代碼。總之,我想那是因爲你正在閱讀的行文件行的循環,每循環您正在定義my_list。因此,在每一個循環my_list只包含一個項目,在該塊你寫這最後一個項目的結束到數據庫。 你可以嘗試這樣的事情:

id_from = 1 
my_list = [] 
for line in file: 
    if line.strip() == '': 
     # update your database 
     id_from += 1 
     my_list = [] 
    else: 
     my_list.append(line) 
0

試試這個:

f = open('my_file.txt', 'r') 
list1 = f.read().splitlines() 

id_from = 1 
for id_to in list1: 
    if id_to == '': 
     id_from += 1 
     continue 
    db1.execute('''INSERT INTO citations(
        ID_from, ID_to) VALUES(%s,%s)''', 
        (id_from, id_to)) 
conn.commit() 

您或許可以使用SQL查詢更有效的方式,而不是這個。