Pyodbc 更新游标
Posted
技术标签:
【中文标题】Pyodbc 更新游标【英文标题】:Pyodbc update cursor 【发布时间】:2018-05-18 12:16:34 【问题描述】:嗨,我有一个带有 SQL 的 Python 脚本,我使用 fecthall() 方法来提取我想要的元素,直到那里都很好,因为我想将两列(datetime.date 和 datetime.time)修改为另一个时区,但我阅读文档,它似乎并不容易......
现在我有下一段代码获取表格,然后尝试将日期转换为另一个时区,我知道...它是一个日期,但如果在西班牙现在是从 2017 年 5 月 12 日在墨西哥的凌晨 12 点从 2017 年 4 月 12 日开始是下午 5 点,太好了……
顺便说一句,我正在使用 pytz
cursor.execute(cadenaSQL + cadenaSQL_dos)
su_dict[base+' hagent'] = cursor.fetchall()
for row in su_dict[base+' hagent']:
row = list(row)[0]
print row
row[0] = hUTC.localize(datetime.datetime.combine(row[0], hoyUTC.time()).astimezone(hMexico))
现在我收到了这个代码的错误:
回溯(最近一次调用最后一次):文件“cms_V2_30m.py”,第 1535 行, 在 main() 文件“cms_V2_30m.py”,第 1444 行,在 main select_hagent() 文件“cms_V2_30m.py”,第 211 行,在 select_hagent row[0] = hUTC.localize(datetime.datetime.combine(row[0], hoyUTC.time()).astimezone(hMexico)) TypeError: 'datetime.date' 对象 不可订阅
编辑:
我想我很接近了,现在的问题是行对象,因为它是一个元组......所以它是不可变的,所以我正在尝试找到一种方法来改变这个值......
新代码:
for row in su_dict[base + ' hagent']:
print row[0]
#list(row)
#print my_date[0]
#print datetime.datetime.combine(my_date[0], hoyUTC.time())
row[0] = hUTC.localize(datetime.datetime.combine(row[0], hoyUTC.time())).astimezone(hMexico)
新的错误:
回溯(最近一次调用最后一次):文件“cms_V2_30m.py”,第 1538 行, 在 main() 文件“cms_V2_30m.py”,第 1447 行,在 main select_hagent() 文件“cms_V2_30m.py”,第 214 行,在 select_hagent row[0] = hUTC.localize(datetime.datetime.combine(row[0], hoyUTC.time())).astimezone(hMexico) TypeError: 'tuple' object does not 支持项目分配
【问题讨论】:
【参考方案1】:看起来您正试图将 .astimezone() 链接到错误的实体。也许试试row[0] = (hUTC.localize(datetime.datetime.combine(row[0], hoyUTC.time())).astimezone(hMexico))
【讨论】:
【参考方案2】:您的问题似乎是在循环中覆盖 row
。试试这个?
for row in su_dict[base + ' hagent']:
my_date = list(row)[0]
print my_date
row[0] = hUTC.localize(datetime.datetime.combine(my_date, hoyUTC.time()).astimezone(hMexico))
【讨论】:
不,现在我收到了这个错误:ValueError: astimezone() cannot be applied to a naive datetime
如果您的日期不是时区,那么您将不得不改用timedelta
。以上是关于Pyodbc 更新游标的主要内容,如果未能解决你的问题,请参考以下文章