2017-04-06 11 views
0

名前がデータベースにあるかどうかを調べる必要があるプロジェクトで作業する。[Python] [sqlite3]値がデータベースにあるかどうかを調べるステートメント?

if name in c.execute("SELECT name FROM table"): 
    print "Name is in table" 
else: 
    print "Name not in table" 

これが可能である:

は、私は次のように声明 何かがあれば、私は何ができるかどうかを知りたいですか?
その他のコードはリクエストに応じて入手可能です!私はあなたが一致するレコードが存在するかどうかを決定するためにここにEXISTSを使うべきだと思う

答えて

3

c.execute("SELECT EXISTS(SELECT 1 FROM table WHERE name=? LIMIT 1)", (name,)) 
record = c.fetchone() 
if record[0] == 1: 
    print "Name is in the table" 
else: 
    print "Name not in table" 

このアプローチでは、SQLiteデータベースは、私たちの名前は、任意のレコードと一致するかどうかを判断するの力仕事を行うには可能という利点があります。あなたのアプローチでは、テーブル内のすべての名前を送り返し、Pythonでそれらの名前をチェックします。これは最適ではありません。なぜなら、帯域幅を浪費し、またあなたのPythonコードでFLOPを浪費しているからです。

+0

(技術的には、sqlite3の場合、ネットワーク帯域幅ではない可能性があります...) –

+1

@AlexLあなたのコメント。 –

+0

@TimBiegeleisen ありがとうございました! Works gr8:D – Dug

0

あなたはこれを試すこと - あなたは結果をフェッチする必要が

c.execute("SELECT name FROM table") 
rows = c.fetchall() 

if (name,) in rows: 
    print "Name is in table" 
else: 
    print "Name not in table" 

execute後。結果は、タプル要素が列値であり、リスト要素が異なる行であるタプルのリストです。

+0

これは正常に動作しますか?これは、テーブルから1行しか取得できないようです。 –

+0

はい。私の悪い。すべての行をフェッチして存在を確認するようにコードを変更する – kuro

関連する問題