2016-07-25 52 views
0

基本上我的代码所做的只是更新我创建的数据库,其中所有列都是'varchar'格式。我的代码能够在时间范围为'10:00-10:15'时创建一个新条目。但是,当时间框架变为'10:15-10:30'或基本上任何其他时间框架时,无法更新它。我的代码如下:在使用python更新mysql中的列时出错

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() 

我的代码提供了以下错误,当我尝试在超过10美元以外的任何其他时间段运行它:00-10:15' 。我收到以下错误:

/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 

我无法解决它。任何帮助将不胜感激。谢谢。

回答

0

你应该设置你的价值作为一个迭代:

value = (3,) 
#  ^

你有什么(3)是一组括号内的整数。圆括号不会使整数成为可迭代的。但添加逗号使其成为您想要的单身元组。

+0

我刚才试了一下,收到的错误是:_mysql_exceptions.ProgrammingError:(1064,“你的SQL语法有错误;查看与你的MySQL服务器版本对应的手册, [2016,7,26,1]在'1') –

+0

你正在将你的日期作为一个列表转换为str(即'year_mon_date_day'),为什么? –

+0

当我玩弄代码来检查是否有任何事情解决了现有的错误时,必须这样做。当我删除str时,我收到的错误状态如下:query ='''UPDATE'traffic_record'.'RoadA' SET''''+ column +''''''''s'WHERE'Date' =''' + year_mon_date_day +''''''' TypeError:无法连接'str'和'list'对象 –