Tôi tin rằng hiệu quả nhất "nó tồn tại" truy vấn chỉ là để làm một 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ác cơ sở dữ liệu để thực hiện bất kỳ hoạt động đếm trên lĩnh vực hoặc cá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ả lại 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à deserialization ở cả hai bên và 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 như count(1)
. Trong trường hợp của bạn bởi 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 trận đấu, 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 bạn là liệu nó có phải là 0 không, vì vậy bạn có thể thực hiện bài kiểm tra sự thật bool.
Cập nhật
Trên thực tế, nó thậm chí còn nhanh hơn để chỉ cần sử dụng rowcount, và thậm chí không lấy 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 django của hiện một queryObject.exists()
.
Bạn chỉ muốn để kiểm tra xem bạn có thể tạo kết nối tới cơ sở dữ liệu hay bạn có thể tạo bảng và chèn dữ liệu thành công không? – jdi
nope tôi biết tôi có thể kết nối tạo và chèn, tôi chỉ cần biết làm thế nào để kiểm tra và xác minh nếu một bản ghi tồn tại. –