2017-03-09 8 views
1

Ich habe Code, die ein Benutzer in einem Kalender klicken können und gibt er das Datum. Ich möchte das Datum zu einer SQL-Abfrage verknüpfen, haben aber den Fehler:Typeerror: int() Argument muss eine Zeichenkette, ein Byte-ähnlichen Objekt oder eine Zahl sein, nicht ‚Kalender‘

File "C:\Users\dansi\AppData\Local\Programs\Python\Python36-32\gui test 3.py", line 293, in datefunction 
agro = int(agro) 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'Calendar' 

-Code in Frage:

def datefunction(self,agro): 
    print(agro) 
    agro = int(agro) 
    agro = datetime.datetime(agro) 
    timeslot = cursor.execute('''SELECT * FROM dates WHERE Date = (?)''',(agro,)) 
    list1 = list(cursor.fetchall()) 
    print(list1) 

def _show_selection(self, text, bbox): 
    """Configure canvas for a new selection.""" 
    agro = self.selection 
    print(self.selection, self.datefunction()) 
    print(agro) 

sagen Hiermit kann der Benutzer auf dem 3. März angeklickt wird, würde es Ausgabe

'2017-03-03 00-00-00' 

Wie wäre in der Lage, den Fehler zu überwinden?

+0

Ihr 'datefunction' hat keine' self' noch gibst du es einen 'agro' ... –

+0

@WillemVanOnsem aus irgendeinem Grund tut es auf meinem Code, aber nicht hier – simons21

+0

was meinst du? Ich verstehe nicht, was du sagst. –

Antwort

2

Das Problem ist, dass die datefunctionagro ein Argument hat. Da es sich jedoch um eine Instanzfunktion handelt, ist die self an agro gebunden. Sie können es mit lösen:

def datefunction(self,agro): 
    print(agro) 
    agro = int(agro) 
    agro = datetime.datetime(agro) 
    timeslot = cursor.execute('''SELECT * FROM dates WHERE Date = (?)''',(agro,)) 
    list1 = list(cursor.fetchall()) 
    print(list1) 

def _show_selection(self, text, bbox): 
    """Configure canvas for a new selection.""" 
    agro = self.selection 
    print(self.selection, self.datefunction(agro)) 
    print(agro)

EDIT:

Wenn Sie nur das Datum möchten, können Sie den Code ändern:

def datefunction(self,agro): 
    print(agro) 
    agro = int(agro) 
    agro = datetime.datetime(agro).date() 
    timeslot = cursor.execute('''SELECT * FROM dates WHERE Date = (?)''',(agro,)) 
    list1 = list(cursor.fetchall()) 
    print(list1) 

def _show_selection(self, text, bbox): 
    """Configure canvas for a new selection.""" 
    agro = self.selection 
    print(self.selection, self.datefunction(agro)) 
    print(agro)
+0

Danke, es funktioniert jetzt! Ich weiß nicht, ob das der richtige Ort ist, aber gibt es eine Möglichkeit, nur das Datum und nicht die Zeit zu haben? – simons21

+1

@ simons21: Sie können '.date()' auf dem '.datetime (agro)' Objekt aufrufen. –

Verwandte Themen