2017-08-26 2 views
0

Diese Teilfunktion gegeben (und Python 2.7, mysql-connector 2.1.6):Warum würde cursor.with_rows `True` zurückgeben, aber fetch_one return` None`?

def get_target_item(self, query, key): 
    self._target_query.execute(query, (key,)) 
    if self._target_query.with_rows: 
     raw_item = self._target_query.fetchone() 

I erwartet raw_item immer nicht sein None, aber es stellt sich heraus, dass es manchmal None ist.

Wenn ich hinzufügen dieses:

 if not raw_item: 
      print "Could not find find target item for query {0} and key {1}".format(query, key) 

ich sehen kann dies manchmal gedruckt wird. Und wenn ich die gleiche Abfrage selbst ausführe, kann ich sehen, dass die Abfrage keine Zeilen für den angegebenen Schlüssel zurückgibt. Warum also schlägt with_rows vor, dass es tut?

Antwort

1

Hier finden Sie, was die Dokumentation für .with_rows sagt:

Gibt an, ob sich der Cursor Zeilen

zurück

Diese Eigenschaft gibt True zurück, wenn Spalte Beschreibungen verfügbar sind, haben könnte und möglicherweise auch Zeilen, die benötigt abgerufen werden.

Wie Sie sehen können, solange das description Attribut des Cursors nicht None ist, wird with_rowsTrue zurück. Wenn Sie einen gepufferten Cursor verwenden, können Sie das Attribut rowcount des Cursors überprüfen, um sicherzustellen, dass es größer als 0 ist. Das sollte eine bessere Kontrolle darstellen.

Ich hoffe, das erweist sich als nützlich.

Verwandte Themen