以下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代码时,我没有得到任何结果。但是,如果我用实际字符串替换%s,我会得到我期望的结果。源变量也传递给函数,因为我使用print语句测试了“source”变量。为什么上面的代码没有返回结果?
答案 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