Python MySQL查询在查询中使用Python变量时没有结果

时间:2015-12-09 20:00:26

标签: python mysql sql

以下python MySQL查询从MySQL表feed_master中检索feed_id。

cur.execute('SELECT feed_id FROM feed_master WHERE url_link = %s',(source,))
rows = cur.fetchall()
        for row in rows:
            print "Feed id : " + str(row)
  • Python版本:2.7.10
  • MySQL版本:5.6.27-0ubuntu1

在执行上面的Python代码时,我没有得到任何结果。但是,如果我用实际字符串替换%s,我会得到我期望的结果。源变量也传递给函数,因为我使用print语句测试了“source”变量。为什么上面的代码没有返回结果?

3 个答案:

答案 0 :(得分:0)

您的查询格式错误。 %s需要单引号。所以,这可能会做你想要的:

cur.execute("""SELECT feed_id FROM feed_master WHERE url_link = '%s'""",(source,))

答案 1 :(得分:0)

我以所有可能的方式调整了代码,以下内容完美执行

DB::table('users')->where(function($query) use ($searchQuery){
                                $query->where('lname', 'LIKE', $searchQuery . '%')
                                      ->orWhere('fname', 'LIKE', $searchQuery . '%')
                                      ->orWhere('phone','LIKE', '%' . $searchquery);
                          })
                          ->get();

我不知道它为什么会起作用,但希望它可以帮助有人面对同样的错误。

答案 2 :(得分:0)

运行查询的正确方法是原始

cur.execute('SELECT feed_id FROM feed_master WHERE url_link = %s',(source,))

看起来你可以遍历游标:

for feed_id in cur:
    print feed_id

这可能最终会打印出一个带有单个元素的元组,但通过将feed_id更改为feed_id,这很容易解决。我无法告诉您为什么fetchall方法无效。

您的更改有效的原因是您使用Python(旧)字符串格式化语法将%s替换为源的任何值,而不是使用数据库客户端来正确替换变量。在SQL语句中使用Python字符串替换是非常不安全的,其中您要替换%s的值是用户输入。见https://en.wikipedia.org/wiki/SQL_injection