2016-04-24 62 views
0

私はPythonを学んでおり、Webアプリケーションで動作するロードブロッキングを打ちました。 ローカルデータベース(mariadb)からデータを取得しようとしていますが、結果を印刷しようとすると、表示されるのは()です。Python cursor.fetchall()は空のタプルを返します

この関数は、DBからデータを取得します。

def getHikeInfo(name): 

    conn, cursor = getConnectionAndCursor() 

    cursor.execute("SELECT * FROM hiking WHERE name = %s", [name]) 

    # fetch the results 
    data = cursor.fetchall() 

    # clean up 
    cursor.close() 
    conn.close() 

    return data 

このコードは、関数を呼び出します。

if 'name' in form: 
    #unpack into python variable 
    name=form['name'].value 
    print name #debug purpose to check name is proper 
    data = getHikeInfo(name) 
    print data #prints '()' 

else: 
    data = getAllHikes() 
    showAllHikes(data) 

私は連結方法を変更するから物事の束を試してみましたその名前をパラメータとして渡すと、何も動作しないように見えます。 名前は明らかに100%表に含まれています。私は問題が何であるかを見ることができない。

何か助けていただければ幸いです。

cursor.execute("SELECT * FROM hiking WHERE name = '%s'"% name) 

をしかし、あなたはあなたのgetHikeInfo関数にリストを渡している場合、あなたはしなければならないことがあります。

+0

私はmariadbに精通していませんが、SQLクエリを実行して結果を返すことを確実にするためのコマンドラインインターフェイスを備えていますか?そうすれば、コードに問題があることを確認できます。 送信しているステートメントを印刷して、変数から正しく組み立てられていることを確認することもできます。 –

+0

@SamIreland mariadbインターフェイスでクエリを実行し、期待される結果を出力します。この問題は、Pythonコードにあるようです。提案のおかげで –

+0

@ishyfishy、私のポストはあなたの質問の答えを構成するために何か追加の明確化が必要ですか?私に知らせてください、私は編集することができます。ありがとう! – Abdou

答えて

0

getHikeInfo関数のname引数が文字列の場合、このようなあなたのcur.executeコールを書き換えます:次のように

cursor.execute("SELECT * FROM hiking WHERE name IN {}".format(tuple(name))) 

だから、あなたはあなたのgetHikeInfo機能を書き換える必要があります:

def getHikeInfo(name): 

    conn, cursor = getConnectionAndCursor() 
    cursor.execute("SELECT * FROM hiking WHERE name = %s"%name) 
    #if you're passing in a list for `name` then you would need to use my second suggestion. 

    # fetch the results 
    data = cursor.fetchall() 

    # clean up 
    cursor.close() 
    conn.close() 

    return data 

テーブルにname引数で定義された条件を満たすデータが含まれている限り、これでいくつかの結果を見ることができます。

希望します。