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 更新游标的主要内容,如果未能解决你的问题,请参考以下文章

将pyodbc游标结果输出为python字典

SQL游标怎么循环更新

PLSQL游标批量更新数据问题

pyodbc简单使用

SqlServer 利用游标批量更新数据

mysql使用游标遍历数据进行批量针对性更新数据,急求mysql大神解答