3

Python2.6は初めてです。Pythonプログラムにフォーマットされているdatedatetime値をフェッチしようとしています。yyyy-mm-dd hh:m:ssPythonで列の型を確認すると、次のエラーが発生します'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データベースから取得した「buffer」オブジェクトを「string」オブジェクトと見なしていることです。stringオブジェクトにはencode()メソッドがありますが、「buffer」オブジェクトにはこのメソッドがありません。必要なことは簡単です。「buffer」オブジェクトを文字列オブジェクトに変換するだけで、難しくはありません。コードに1行追加するだけです。

tempString = str(item [10])

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

私は今日同じ問題に遭遇しました、そしてグーグルは私をここに導きました、そしてまだ適切な答えを見つけませんでした。だからここにそれを提供します。sqliteレコードデータのタイプはバッファまたは文字列であり、dbテーブルの作成方法、sqliteバージョン、およびsqlite dbプラグインのバージョンによって決定されるため、テスト結果はPedroRomanoのものとは異なります。ただし、いずれにしても、次の行を追加するだけです:tempString = str(item [10])、システムがそれを文字列として使用するように強制する可能性があります。

于 2016-09-13T16:12:46.500 に答える