如果MySQL没有返回结果,则打印

时间:2013-10-15 13:24:06

标签: python mysql python-2.7

到目前为止,这是我的代码。我试图打印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]

4 个答案:

答案 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 ...”) - >你有直接返回的行数