Python& SQL。在for循环中在列中插入变量

时间:2015-10-14 08:09:56

标签: python sql sql-server sentiment-analysis

作为我对推文的情绪分析的一部分,我需要从我的数据库中提取推文,运行python脚本以获得情绪评分并将其插回数据库。

我的部分代码:

{G:'latdat',K:'Logdat'}

更新表时,所有行都获得与第一条推文相同的情绪值,而不是自己的。 "打印(情绪)"每个推文的分数逐个显示,但似乎循环在更新表时不起作用。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

这不是while循环的问题,而是使用UPDATE命令;您告诉它更新TestTable中的所有行,而不仅仅是您正在处理的行。您需要为该UPDATE提供WHERE条件。

cursor.execute("SELECT TestTable.Tweet, TestTable.id FROM TestTable")
for row in cursor.fetchall():
    ...
    cursor.execute("Update TestTable SET score2 = %s WHERE id = %s;", (sentim, row[1]))

(假设您的主键列名为id)。

另请注意,您应养成使用参数化查询的习惯;虽然在这段代码中没有SQL注入的可能性,因为没有任何东西来自用户输入,其他代码可能会有这个问题,所以最好完全避免它。

答案 1 :(得分:1)

您需要使用where子句限定update子句,该子句将更新的行限制为您要修改的行。

cursor.execute("Update TestTable SET score2 = '" + (str(sentim)) + "' where Tweet = '" + row[0] + "';")

这样的东西

您可能应该修改select语句以提取主键,并在where子句中使用它,而不是使用Tweet列作为键。

此外,使用串联构建SQL语句可能是一个坏主意,因为它可能会使您暴露于SQL注入漏洞,因此您可能希望探索如何使用预准备语句或参数进行查询。