2016-07-25 6 views
0

Im Grunde, was mein Code tut, ist einfach die Datenbank aktualisieren, die ich erstellt habe, wo alle Spalten sind 'Varchar' Format. Mein Code kann einen neuen Eintrag erstellen, wenn der Zeitraum '10: 00-10: 15' ist. Wenn es jedoch nicht aktualisiert werden kann, wenn der Zeitrahmen "10: 15-10: 30" oder grundsätzlich ein anderer Zeitrahmen wird. Mein Code ist unten:Fehler beim Aktualisieren der Spalte in Mysql mit Python

import time 
import MySQLdb 
from MySQLdb import * 
import datetime 
import json 

date = time.localtime() 
year_mon_date_day = [date.tm_year, date.tm_mon, date.tm_mday, date.tm_wday] 

column = '' 
if date.tm_hour==10: 
    if date.tm_min<=15: 
     column = "10:00-10:15" 
    elif date.tm_min<=30: 
     column = "10:15-10:30" 
    elif date.tm_min <= 45: 
     column = "10:30-10:45" 
    elif date.tm_min <= 60: 
     column = "10:45-11:00" 

elif date.tm_hour==11: 
    if date.tm_min<=15: 
     column = "11:00-11:15" 
    elif date.tm_min<=30: 
     column = "11:15-11:30" 
    elif date.tm_min <= 45: 
     column = "11:30-11:45" 
    elif date.tm_min <= 60: 
     column = "11:45-12:00" 

elif date.tm_hour==12: 
    if date.tm_min<=15: 
     column = "12:00-12:15" 
    elif date.tm_min<=30: 
     column = "12:15-12:30" 
    elif date.tm_min <= 45: 
     column = "12:30-12:45" 
    elif date.tm_min <= 60: 
     column = "12:45-01:00" 

elif date.tm_hour==13: 
    if date.tm_min<=15: 
     column = "01:00-01:15" 
    elif date.tm_min<=30: 
     column = "01:15-01:30" 
    elif date.tm_min <= 45: 
     column = "01:30-01:45" 
    elif date.tm_min <= 60: 
     column = "01:45-02:00" 

else: 
    pass 

db = MySQLdb.connect(host='localhost', user='root', passwd='4747',db='traffic_record') 
cursor=db.cursor() 


if column == "10:00-10:15": 
    query = '''INSERT INTO `traffic_record`.`RoadA` (`Date`,`Day`,`''' + column + '''`) VALUES ('%s','%s','%s')''' 
    value = (year_mon_date_day,date.tm_wday, 9) 
else: 
    query = '''UPDATE `traffic_record`.`RoadA` SET `''' + column + '''`=`%s` WHERE `Date`=''' + str(year_mon_date_day) + '''`''' 
    value = (3) 

cursor.execute(query, value) 

db.commit() 
db.close() 

Mein Code gibt folgende Fehlermeldung, wenn ich versuche, es in einem anderen Zeitrahmen zu laufen andere als '10: 00-10: 15' . Ich erhalte den folgenden Fehler:

/usr/bin/python2.7 /home/sparsha/PycharmProjects/MachineLearning/fill_table.py 
Traceback (most recent call last): 
    File "/home/sparsha/PycharmProjects/MachineLearning/fill_table.py", line 83, in <module> 
cursor.execute(query, value) 
    File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 187, in execute 
query = query % tuple([db.literal(item) for item in args]) 
TypeError: 'int' object is not iterable 
Process finished with exit code 1 

Ich bin nicht in der Lage, es zu lösen. Jede Hilfe wird sehr geschätzt. Vielen Dank.

Antwort

0

Sie sollten Ihren Wert als iterable gesetzt:

value = (3,) 
#  ^

Was haben Sie (3) eine ganze Zahl mit einer Gruppierung Klammer ist. Die Klammer macht die ganze Zahl nicht iterierbar. Aber das Hinzufügen dieses Kommas macht es zu einem Singleton-Tupel, was du willst.

+0

Ich habe es gerade jetzt versucht und der Fehler, den ich erhielt, ist: _mysql_exceptions.ProgrammingError: (1064, "Sie haben einen Fehler in Ihrer SQL-Syntax; überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe entspricht") [2016, 7, 26, 1] ''at line 1") –

+0

Sie geben Ihr Datum als Liste in str (also 'year_mon_date_day') um, warum ist das so? –

+0

Das muss sein, wenn ich mit dem Code herumspielte, um zu überprüfen, ob irgendetwas den vorhandenen Fehler löste. Wenn ich den str entferne, gibt der Fehler, den ich erhalte, an: query = '' 'UPDATE 'traffic_record''RoadA' SET'' '' + spalte + '' ''='% s' WHERE 'Datum' =' '' + year_mon_date_day + '' ''' '' TypeError: Objekte 'str' und 'list' können nicht verkettet werden –

Verwandte Themen