我编写了一些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 :(得分: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()
答案 1 :(得分: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,我猜这将是行。