2017-08-09 11 views
0

私はPythonを初めて使い慣れていることにご注意ください。 私はPythonでMySQLサーバからデータにアクセスしようとしました。 これまで私はサーバーとの接続を確立してデータを取得しましたが、データを解析する際に問題が発生しました。 次のようなエラーが表示されます。私は自分のSQLサーバーからいくつかのjsonデータにアクセスしようとしています

TypeError: expected string or buffer

import MySQLdb 
import json 

if __name__ == "__main__": 
    conn = create_con() 
    cur = conn.cursor() 
    cur.execute("select answer_option from question_answer") 

    result = cur.fetchone() 
    x = json.loads(result) 

答えて

0

はTypeError:期待される文字列またはバッファは明らかに問題をほのめかします。

print resultを入力して種類を確認できます。

-

cursor.fetchone()

このメソッドは、クエリ結果セットの次の行を検索し、もう行が利用可能でない場合単一配列、又はなしを返します。

json.loads(S)

この方法ドキュメント参照here

==この変換テーブルを用いてPythonオブジェクトにJSON文書を含むSTRまたはUnicodeインスタンスをデシリアライズ。結果はすでにPythonオブジェクトであるとして

だから、私は...あなたがjson.loadsを必要といけないかもしれないと思う - this

を参照してください。

+0

タイプは、私はタプルを解析できる方法がわからタプルではありません? – abz

+0

「結果」または「x」オブジェクトで何をしようとしていますか? toupleはリスト – Rishi

+0

のようなシーケンスオブジェクトですが、あなたの答えは本当に理解に役立ちました。インポートされたデータは自動的にタプルでフォーマットされていました.Json.loads()を使用するためには、 – abz

0

JSON負荷 - > JSONオブジェクトを表す文字列からオブジェクトを返します。

json dumps - >は、オブジェクトからjsonオブジェクトを表す文字列を返します。

あなたのjson.loadsは文字列表記を探しています。ですから、json.dumpsを行い、その後json.loadsを実行することをお勧めします。

これは修正する必要があります。

import MySQLdb 
import json 

    if __name__ == "__main__": 
     conn = create_con() 
     cur = conn.cursor() 
     cur.execute("select answer_option from question_answer") 

     result = cur.fetchone() 
     x = json.dumps(result) 
     x = json.loads(result) 
0

デフォルトでは、Cursorクラスは行をタプルとして返します。

cur = conn.cursor() 
    cur.excute("select answer_option from question_answer") 
    result = cur.fetchone() 

印刷(結果)あなたは、あなたの結果

x = result[0] 

OR

を取得するには、この操作を行うことができ("foo",)

を得る辞書としての行を返すために、あなたのカーソルでMySQLdb.cursors.DictCursorが含まれます。その後、名前でアクセスできます。

cur = conn.cursor(MySQLdb.cursors.DictCursor) 
    cur.excute("select answer_option from question_answer") 
    result = cur.fetchone() 

印刷(結果)あなたはこのようなあなたの結果にアクセスすることができます{"answer_option": "foo"}

を得る:

x = result['answer_option'] 
関連する問題