3

我是 Python 2.6 的新手。我一直在尝试在我的 Python 程序中获取格式为格式的日期日期时间值。yyyy-mm-dd hh:m:ss在检查 Python 中的列类型时,我收到错误:'buffer' object has no attribute 'decode'. 我想使用该strptime()函数来拆分日期数据并使用它,但我找不到如何将缓冲区转换为字符串。以下是我的代码示例(也可在此处获得):

conn = sqlite3.connect("mrp.db.db", detect_types=sqlite3.PARSE_DECLTYPES)
cursor = conn.cursor()
qryT = """
    SELECT dateDefinitionTest FROM t
    WHERE IDproject = 4 AND IDstatus = 5
    ORDER BY priority, setDate DESC
"""
rec = (4,4)
cursor.execute(qryT,rec)
resultsetTasks = cursor.fetchall()
cursor.close()  # closing the resultset
for item in resultsetTasks:
    taskDetails = {}
    _f = item[10].decode("utf-8")

我得到的例外是:

'buffer' object has no attribute 'decode'
4

2 回答 2

2

我不确定您的问题可能是什么。以下是您尝试实现的工作示例,希望对您有所帮助:

#!/usr/bin/env python

import datetime
import sqlite3

conn = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
cursor = conn.cursor()
cursor.execute("CREATE TABLE t (dateDefinitionTest DATETIME)")
cursor.execute("INSERT INTO t VALUES (?)", (datetime.datetime.now(),))
query = "SELECT dateDefinitionTest FROM t"
cursor.execute(query)
for row in cursor.fetchall():
    dt = datetime.datetime.strptime(row[0], "%Y-%m-%d %H:%M:%S.%f")
    print(repr(dt))
    print(dt.strftime("%Y-%m-%d %H:%M:%S.%f"))
cursor.close()

输出:

datetime.datetime(2012, 11, 11, 16, 40, 26, 788966)
2012-11-11 16:40:26.788966
于 2012-11-11T13:11:32.383 回答
2

您的问题的根本原因是认为从 Sqlite 数据库中获取的“缓冲区”对象为“字符串”对象,字符串对象具有 encode() 方法,但“缓冲区”对象没有此方法。您需要做的很简单:只需将“缓冲区”对象转换为字符串对象,这并不难,只需在代码中添加一行:

tempString=str(项目[10])

_f = tempString.decode("utf-8")

我今天也遇到了同样的问题,google了一下,直接到这里,还没有找到合适的答案。所以在这里提供。sqlite 记录数据的类型是缓冲区还是字符串,取决于我们如何构建数据库表,以及 sqlite 版本和 sqlite db 插件的版本,因此您的测试结果与 Pedro Romano 的不同。但无论如何,只需添加这一行:tempString=str(item[10]),它可以强制系统将其用作字符串。

于 2016-09-13T16:12:46.500 回答