Tôi đã viết một daemon python liên tục thăm dò cơ sở dữ liệu mysql. Nó hoạt động tốt khi tôi liên tục kết nối và kết nối lại với cơ sở dữ liệu giữa các truy vấn như sau:Python MySQLdb truy vấn chọn trống mặc dù truy vấn thủ công thực thi cung cấp kết quả
def connect(self):
self.connection = MySQLdb.connect(...)
self.cursor = self.connection.cursor()
return self.cursor
def disconnect(self): ...
self.cursor.close()
self.connection.close()
def getData(); ....
sqlcmd = """SELECT ...."""
self.cursor.execute (sqlcmd % (params))
result = self.cursor.fetchall()
return result
if __name__ == "__main__":
db = prepaid_db.Database()
while 1:
dbConnection = db.connect()
data = db.getData()
... do stuff
db.disconnect
Nhưng khi tôi cố gắng giữ cho các kết nối cơ sở dữ liệu mở (như dưới đây) tôi nhận được một truy vấn rỗng, mặc dù, trong khi nó là chạy tôi có thể truy vấn db theo cách thủ công, cung cấp cho nó cùng một truy vấn và nhận được kết quả tôi mong đợi.
if __name__ == "__main__":
db = prepaid_db.Database()
dbConnection = db.connect()
while 1:
data = db.getData()
... do stuff
db.disconnect
Tôi đã thử tất cả mọi thứ để hiểu tại sao nó sẽ làm điều này:
- bộ nhớ cache khuyết tật truy vấn và thêm ngẫu nhiên x = x với truy vấn trong bộ nhớ cache trường hợp mysql bị nhầm lẫn bởi các truy vấn tương tự
- cho phép truy vấn đăng nhập mysql: truy vấn đi qua nhưng vẫn trả lại tập hợp trống
- di chuyển cursor.connect đến database.connect và quay lại getData(), không có sự khác biệt
Tôi rất thích đầu mối về những gì tôi không hiểu.
Dấu chấm phẩy trong 'def getData();' phải là dấu hai chấm. – unutbu
Liệu 'self.cursor.fetchall()' trả về 'None' lần đầu tiên thông qua' while-loop', hay sau nhiều lần vượt qua? – unutbu
- có trên dấu hai chấm, xin lỗi, typo đơn giản –