我是Python 2.6的新手。我一直在尝试在我的Python程序中获取日期 datetime 值,该值为yyyy-mm-dd hh:m:ss
格式。在Python中检查列类型时,我收到错误:'buffer' object has no attribute 'decode'
。我想使用strptime()
函数来分割日期数据并使用它,但我找不到如何将缓冲区转换为字符串。以下是我的代码示例(也可用here):
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'
答案 0 :(得分: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
答案 1 :(得分:2)
你问题的根本原因在于考虑缓冲区'对象从Sqlite数据库中获取为'字符串'对象,字符串对象具有encode()方法,但是'缓冲区'对象没有这种方法。 你需要做的很简单:只需转换'缓冲区'对象到字符串对象,并不困难,只在代码中添加一行:
tempString = STR(项[10])
_f = tempString.decode(" utf-8")
我今天遇到了同样的问题,谷歌用Google引导我到这里,发现还没有合适的答案。所以在这里提供。 sqlite记录数据的类型是缓冲区或字符串是由我们如何构造我们的db表,sqlite版本和sqlite db插件的版本决定的,所以你的测试结果与Pedro Romano&#39不同; S。但无论如何,只需添加以下行:tempString = str(item [10]),它可以强制系统将其用作字符串。