2013-07-08 92 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