2013-07-08 133 views
0

我已經編寫了一些python代碼來連接到MySQL數據庫,打開一個文本文件,並對文本文件中的每個條目執行查詢並將結果寫入輸出文件。而不是將每個查詢的結果寫入輸出文件,但只寫入一個結果。如果我使用的查詢沒有參數,它一切正常。只有當我嘗試添加參數時纔會出現此問題。使用Python進行MySQL查詢不返回所有結果

我對Python很新,所以我可能會犯一個愚蠢的錯誤,但我還沒有能夠遇到任何有幫助的東西,所以任何援助將不勝感激。

我的代碼是:

output = open("results.txt", "w+") 

cnx= mysql.connector.connect(**config) 
cursor = cnx.cursor()      

with open("input.txt") as i: 
    for line in i:         

     # Construct query to get type 
     query = ("select type from table1, table2 " 
     "where table1.name = %s and table1.id = table2.id") 

     # Query arguments 
     args = (line) 

     cursor.execute(query, args)   # Execute query 

     for entry in cursor:     
      output.write(str(entry) + "\n") 

cursor.close()          
cnx.close() 
+0

你使用關閉文件'output.close ()'?否則,可能數據在輸出緩衝區中丟失。 – dnet

+1

記錄:「args =(line)」應該是「args =(line,)」,但請參閱joente的答案以獲得真正的修復。 – geertjanvdk

回答

1

我不知道你正在使用的查詢,但我認爲,如果你的查詢工作,你想要什麼,這應該是接近:

output = open('myoutputfile.txt', 'w') 
cnx = mysql.connector.connect(**config) 
cursor = cnx.cursor()      

# Construct query to get type, there's no need to include this in the loop 
query = ("""SELECT type FROM table1, table2 
    WHERE table1.name = %s AND table1.id = table2.id""") 

with open("input.txt") as f: 
    for line in f:         

     # Query arguments 
     args = (line.strip(),) # added .strip() 

     cursor.execute(query, args)  # Exec query 

     entries = cursor.fetchall() 
     for entry in entries:     
      output.write(str(entry[0]) + "\n") 

cnx.close() 
output.close() 
+0

不幸的是,這不適合我。我得到了和我原來一樣的結果。我已經手動測試了這個查詢,所以我知道它確實有效。它適用於查詢沒有參數的情況,但是一旦它們被添加就會給出單個結果。 – Riddle

+0

我已經改變了一點點的代碼。 (將.strip()添加到行參數中)。也許這可以解決您的問題,因爲我猜想終點線字符是否包含在其他內容中...... – joente

+0

正是這樣,非常感謝:D – Riddle

0

你是不是在一段代碼,打開輸出文件進行寫操作,至少不是你發表。

 for entry in cursor: 
      ## what output? when and how was it opened?    
      output.write(str(entry) + "\n") 

你以前用「w」(代表寫入)模式打開「output.txt」嗎?在此代碼如果你想要寫在附加模式「input.txt中」文件中的代碼需要上線4你只打開「input.txt的」文件:

i.write(str(entry) + "\n") 

(文件必須以追加或寫入模式打開)。同樣在查詢參數中,您不需要傳遞四行。在你的查詢中,你只提供一個參數(table1.name =%s),你只需要將參數傳遞給這個%s,我想這將是行。

+0

我在打開連接前打開了輸出文件。應該包括那個抱歉,但我已經更新了我現在發佈的代碼。有些東西不會被寫入輸出文件,只是不是全部都在那裏。至於參數太多,這只是我發佈的錯誤。我的代碼正確並在此修復,對此感到抱歉。 – Riddle