Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách kiểm tra xem bản ghi có tồn tại hay không bằng Python MySQdb

Tôi tin rằng truy vấn "nó có tồn tại" hiệu quả nhất chỉ là thực hiện count :

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

Thay vì yêu cầu cơ sở dữ liệu thực hiện bất kỳ hoạt động đếm nào trên các trường hoặc hàng, bạn chỉ yêu cầu nó trả về 1 hoặc 0 nếu kết quả tạo ra bất kỳ kết quả phù hợp nào. Điều này hiệu quả hơn nhiều khi trả về các bản ghi thực tế và đếm số lượng phía máy khách vì nó tiết kiệm tuần tự hóa và giải mã hóa ở cả hai phía cũng như truyền dữ liệu.

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(*) sẽ giống với count(1) . Trong trường hợp của bạn vì bạn đang tạo một bảng mới, nó sẽ hiển thị 1 kết quả. Nếu bạn có 10.000 kết quả phù hợp, nó sẽ là 10000. Nhưng tất cả những gì bạn quan tâm trong bài kiểm tra của mình là nó CÓ phải là 0 hay không, vì vậy bạn có thể thực hiện kiểm tra độ thật giả.

Cập nhật

Trên thực tế, thậm chí còn nhanh hơn nếu chỉ sử dụng số lượng hàng và thậm chí không tìm nạp kết quả:

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]: 

Đây cũng là cách ORM của django thực hiện 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. Truy vấn Mysql để chuyển đổi động các hàng thành cột

  2. Làm thế nào để tạo số ngẫu nhiên mà không lặp lại trong cơ sở dữ liệu bằng PHP?

  3. Mysql kết nối trong hai bảng

  4. Lưu trữ các quyền của ứng dụng trong cơ sở dữ liệu

  5. Nâng cấp Laravel 5.4, chuyển đổi sang utf4mb từ utf8