Python:将SQLITE列的缓冲区类型转换为字符串

时间:2012-11-11 11:52:33

标签: python sqlite python-2.6

我是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'

2 个答案:

答案 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]),它可以强制系统将其用作字符串。