私は、クエリがちょうど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でないかどうかということですので、bool真理テストを実行できます。
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()
を行う方法もある。
更新
実は、それだけで行数を使用し、さらにその結果をフェッチしないで、さらに高速です。
出典
2012-11-14 06:21:35
jdi
よりも優れていますデータベースに接続できること、またはテーブルを作成してデータを挿入できることを確認する – jdi
いいえ私は作成と挿入を接続できることを知っています。レコードが存在するかどうかを確認して確認する方法を知る必要があります。 –