0

我几乎成功地通过 Python 对 MySQL 进行了查询,该查询显示了给定品牌的最常见数据集。我遇到的问题是当我尝试运行print row[1], row[2]命令时,它返回 productnum 而不是我想要的空间,如 product num。我试过做print row[1], " ", row[2],但它不满足测试用例。有没有其他方法可以解决这个问题。我知道这听起来可能不是一个重要的问题,但它一直困扰着我,正是这个问题没有通过测试。完整代码如下。

4

2 回答 2

4

请不要通过连接字符串来创建 SQL。假装我是攻击者,我将您的功能称为:

inject = "'; SELECT name,cardnum FROM credit_cards; --"
most_popular(inject, 'LOL')

您的代码将有助于将其扩展到:

SELECT DISTINCT brand, product, COUNT(*) AS num FROM table1 WHERE brand = ''; SELECT * FROM credit_cards; --'" "GROUP BY product ORDER BY num desc, product asc LIMIT LOL

现在你的客户正在起诉你。始终,始终使用参数化查询,而不是自己构建查询。将其更改cursor.execute()为:

 cursor.execute("SELECT DISTINCT brand, product, COUNT(*) AS num FROM table1 WHERE brand = %s GROUP BY product ORDER BY num desc, product asc LIMIT %s", (brands, num_frequency))

多年来我一直在编写 DB 库,试图把这些东西做好的想法仍然让我感到害怕,主要是因为搞砸它的惩罚是如此严重。让您的数据库库为您完成繁重的工作。

于 2012-10-10T22:51:57.913 回答
1

怎么样print "%s %s" % (row[1], row[2])(不确定行是否需要显式转换)

编辑:或print "{0} {1}".format(s, s2)(符号%有点过时)

于 2012-10-10T22:49:04.187 回答