sql >> データベース >  >> RDS >> Mysql

PythonMySQdbでレコードが存在するかどうかを確認する方法

    最も効率的な「存在する」クエリは、countを実行することだと思います。 :

    sqlq = "SELECT COUNT(1) FROM settings WHERE status = '1'"
    xcnx.execute(sqlq)
    if xcnx.fetchone()[0]:
        # exists
    

    データベースにフィールドまたは行のカウント操作を実行するように要求する代わりに、結果が一致する場合は1または0を返すようにデータベースに要求するだけです。これは、実際のレコードを返し、クライアント側で量をカウントするよりもはるかに効率的です。これにより、両側でのシリアル化と逆シリアル化、およびデータ転送が節約されます。

    In [22]: c.execute("select count(1) from settings where status = 1")
    Out[22]: 1L  # rows
    
    In [23]: c.fetchone()[0]
    Out[23]: 1L  # count found a match
    
    In [24]: c.execute("select count(1) from settings where status = 2")
    Out[24]: 1L  # rows
    
    In [25]: c.fetchone()[0]
    Out[25]: 0L  # count did not find a match
    

    count(*) count(1)と同じになります 。あなたの場合、新しいテーブルを作成しているので、1つの結果が表示されます。 10,000の一致がある場合、10000になります。ただし、テストで気になるのは、0でないかどうかだけなので、ブール値の真理テストを実行できます。

    更新

    実際には、行数を使用するだけで、結果をフェッチすることすらしない方がさらに高速です。

    In [15]: if c.execute("select (1) from settings where status = 1 limit 1"): 
                print True
    True
    
    In [16]: if c.execute("select (1) from settings where status = 10 limit 1"): 
                print True
    
    In [17]: 
    

    これは、djangoのORMがqueryObject.exists()を実行する方法でもあります。 。



    1. brew servicesリストはmysqlが実行されていることを示していますが、接続できません

    2. SQLclで構文の強調表示を構成する方法

    3. SQLのSUBSTRINGコマンド:入門書

    4. Linq to Entities Group By(OUTER APPLY)oracle11.2.0.3.0はapplyをサポートしていません