Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да проверите дали запис съществува с Python MySQdb

Вярвам, че най-ефективната заявка "съществува ли" е просто да се направи 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 съвпадения, това ще бъде 10 000. Но всичко, което ви интересува във вашия тест, е дали НЕ е 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]: 

Също така ORM на django прави queryObject.exists() .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разделя низа на името в mysql?

  2. Заявка за намиране на таблици, променени през последния час

  3. Мигрирайте от традиционна репликация към GTID

  4. INNER JOIN същата таблица

  5. Красноречив:Обаждане Къде на връзка