Saya percaya kueri "apakah itu ada" yang paling efisien adalah dengan melakukan count
:
sqlq = "SELECT COUNT(1) FROM settings WHERE status = '1'"
xcnx.execute(sqlq)
if xcnx.fetchone()[0]:
# exists
Alih-alih meminta database untuk melakukan operasi penghitungan apa pun pada bidang atau baris, Anda hanya memintanya untuk mengembalikan 1 atau 0 jika hasilnya menghasilkan kecocokan. Ini jauh lebih efisien daripada mengembalikan catatan aktual dan menghitung jumlah sisi klien karena menghemat serialisasi dan deserialisasi di kedua sisi, dan transfer data.
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(*)
akan sama dengan count(1)
. Dalam kasus Anda karena Anda membuat tabel baru, itu akan menunjukkan 1 hasil. Jika Anda memiliki 10.000 kecocokan, itu akan menjadi 10.000. Tetapi yang Anda pedulikan dalam pengujian Anda adalah apakah BUKAN 0, sehingga Anda dapat melakukan uji kebenaran bool.
Perbarui
Sebenarnya, lebih cepat hanya menggunakan jumlah baris, dan bahkan tidak mengambil hasil:
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]:
Ini juga bagaimana ORM Django melakukan queryObject.exists()
.