Warum int als Returnwert?
Verfasst: Freitag 15. Juni 2018, 13:19
Mahlzeit!
Python ist neu für mich, und ich spiele grade ein wenig damit herum.
Konkret sitze ich ein kleiner Datenbank-Klasse, die die Verbindung herstellen und Abfragen ausführen und loggen soll.
Ich nutze dazu MySQLdb.
Innerhalb der Klasse habe ich als Eigenschaften u.a.:
Nun hätte ich gerne eine Methode, die als Parameter eine SQL-Abfrage entgegennimmt, die bestehende Connection nutzt und dann die Abfrage ausführt.
Das klappt auch, aber der Returnwert ist mir schleierhaft.
Warum ist der Returnwert von meiner execute() Methode "int"? Ich hätte ein Object erwartet....
Was ich gerne tun würde:
Bei result.fetchall() bekomme ich einen AttributeError (int object has no attribute fetchall).
Warum klappt das nicht, das hier aber schon:
Ich kann mir das Verhalten weder erklären, noch weiß ich was ich ändern muss, damit ich außerhalb der Klasse mit "self.cursor.execute" weiterarbeiten kann.
Hat jemand eine Idee?
Python ist neu für mich, und ich spiele grade ein wenig damit herum.
Konkret sitze ich ein kleiner Datenbank-Klasse, die die Verbindung herstellen und Abfragen ausführen und loggen soll.
Ich nutze dazu MySQLdb.
Innerhalb der Klasse habe ich als Eigenschaften u.a.:
Code: Alles auswählen
self.connection = MySQLdb.connect(self.hostname, self.username, self.password, self.database)
self.cursor = self.connection.cursor()
Das klappt auch, aber der Returnwert ist mir schleierhaft.
Code: Alles auswählen
def execute(self, query):
if(self.cursor):
try:
self.queries.append(query)
return self.cursor.execute(query)
except Exception as e:
logging.error('DB-Execution Error: %s', str(e))
return False
else:
logging.warning('Trying to execute query without connection (%s)', query)
return False
Was ich gerne tun würde:
Code: Alles auswählen
db = meineDBKlasse()
result = db.execute("SELECT * FROM tabelle")
rows = result.fetchall()
Warum klappt das nicht, das hier aber schon:
Code: Alles auswählen
def execute(self, query):
if(self.cursor):
try:
self.queries.append(query)
result = self.cursor.execute(query)
return result.fetchall()
except Exception as e:
logging.error('DB-Execution Error: %s', str(e))
return False
else:
logging.warning('Trying to execute query without connection (%s)', query)
return False
Hat jemand eine Idee?