2016-02-04 80 views
0

我的表有3列:ID,Author和In_order。我正在閱讀文件,並且一行包含由逗號分隔的作者列表。我試圖實現的是將作者的姓名插入到作者列中,並在ID字段中輸入正確的ID,然後在列表中出現的位置(它總是按順序排列)。我想到底是我的表看起來像這樣:Python,如何按給定順序將列表插入表中的列

ID Author In_order 
1  Author1 1 
1  Author2 2 
1  Author3 3 
2  Author1 1 
2  Author2 2 
3  Author1 1 
3  Author2 2 

我用枚舉函數給每筆者在列表中的位置。

以下是與此問題相關的代碼。

author_list = line.split(",") 

     for In_order, author in enumerate(author_list, start=1): 
      In_order = In_order 
      author = author 

db1.execute('''INSERT INTO authors(
        ID, AUTHOR, In_order) VALUES(%s,%s,%s)''', 
        (ID, author, In_order)) 

我不確定究竟要在In_order和author變量中存儲什麼。 代碼將運行,但只有列表中的最後一位作者會與其相應的ID及其在列表中的正確位置一起插入表中。即:

ID Author In_order 
1  Author3 3 
2  Author2 2 
3  Author2 2 

任何意見,將不勝感激我對python和mysql都是新手!

+1

你的插入是從'for'循環中「縮進」的,所以'db1'的東西在循環完成後運行,這意味着你只會得到循環迭代的最後一個項目。 –

回答

2

您希望.execute語句處於循環中。

for In_order, author in enumerate(author_list, start=1): 
     In_order = In_order 
     author = author 

     db1.execute('''INSERT INTO authors(
          ID, AUTHOR, In_order) VALUES(%s,%s,%s)''', 
          (ID, author, In_order)) 
2

有幾件事情是錯誤的。首先在MySQL中,您不需要存儲訂單,您可以稍後存儲要排序的數據。也許你錯誤地標記了這個In_order字段。也許數據實際上是別的東西。

其次作者ID應該是唯一的,我認爲你的重複。

+0

我想我可以看到你來自哪裏..在這種情況下In_order只是一個變量,我想存儲每個作者的位置。關於唯一鍵,我有一個組合主鍵,其中列表中作者的ID和In_order值(位置)的組合是唯一的,因此它仍然允許我重複ID中的ID柱。這是否稍微有點意義或者我偏離標準?感謝您的任何反饋@ dlite922 – RyanKilkelly

+0

我想你想讓執行函數在for循環範圍內,就像@bernie所說的那樣,因爲在for循環之外,變量ID,作者和In_order沒有意義(技術術語:超出範圍) – dlite922