到目前为止,这是我的代码。我试图打印No results found
如果MySQL没有返回任何结果,但我无法弄明白。也许我正在使用不正确的论点。有人能给我一个例子吗?非常感激!
def movie_function(film):
connection = mysql connection info
cursor = connection.cursor()
sql = "SELECT * FROM film_database WHERE film_name = '"+film+"' ORDER BY actor"
cursor.execute(sql)
rows = cursor.fetchall()
for row in rows:
print row[1]
答案 0 :(得分:4)
执行select语句时,cursor.rowcount
设置为检索的结果数。此外,没有必要致电cursor.fetchall()
;直接在光标上循环更容易:
def movie_function(film):
connection = mysql connection info
cursor = connection.cursor()
sql = "SELECT * FROM film_database WHERE film_name = %s ORDER BY actor"
cursor.execute(sql, (film,))
if not cursor.rowcount:
print "No results found"
else:
for row in cursor:
print row[1]
请注意,我还将代码切换为使用SQL参数;这里不需要使用字符串插值,将其留给数据库适配器。 %s
占位符将替换为从cursor.execute()
的第二个参数中获取的正确引用的值,这是一个值序列(此处为一个元素的元组)。
使用SQL参数还可以让一个好的数据库重用select语句的查询计划,并将引用保留到数据库适配器可防止SQL注入攻击。
答案 1 :(得分:0)
您可以在代码后使用cursor.rowcount
来查看实际返回的行数。有关详情,请参阅here。
答案 2 :(得分:0)
我想,这应该可行。
def movie_function(film):
connection = mysql connection info
cursor = connection.cursor()
sql = "SELECT * FROM film_database WHERE film_name = %s ORDER BY actor"
cursor.execute(sql, [film])
rows = cursor.fetchall()
if not rows:
print 'No resulrs found'
return
for row in rows:
print row[1]
注意,我改变了film
参数传递给查询的方式。我不知道,究竟应该是什么(这取决于你使用的python的MySQL驱动程序),但重要的是要知道,由于安全原因,你不应该将你的参数直接传递给查询字符串。 / p>
答案 3 :(得分:-1)
您也可以使用:
rows_affected = cursor.execute(“SELECT ...”) - >你有直接返回的行数