0

我已经编写了一些 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()
4

2 回答 2

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()
于 2013-07-08T10:07:45.193 回答
0

您没有打开输出文件进行编写,至少不是在您发布的代码中。

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

你之前有没有用“w”(代表写)模式打开“output.txt”?在此代码中,您仅在第 4 行打开“input.txt”文件。如果您想以附加模式写入“input.txt”文件,代码需要是:

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

(并且文件必须以追加或写入模式打开)。同样在查询参数中,您不需要传递四行。在您的查询中,您只需提供一个参数(table1.name = %s),您只需将参数传递给此 %s,我猜这将是行。

于 2013-07-08T09:54:27.643 回答