web-dev-qa-db-ja.com

データベーステーブルのjsonオブジェクトを返す方法

データベースのデータを使用してGoogleマップにマーカーをプロットするWebクライアントを作成しています。したがって、私の列は、ID、名前、住所、緯度、経度、説明です。私のクライアントは、休憩サーバーのルートからデータを取得します。

私は現在flask in my python server。を使用しています。これは私のルート上の現在のコードです。

@testRestServer.route("/dbMap", methods=['GET', 'POST'])
def getData():
    cursor.execute("SELECT * FROM markers ")
    return jsonify(cursor.fetchall())

これは私が取得したjsonの出力ですが、参照としてヘッダーがないため、Googleマップコードを操作するために正しく操作することができません。

[
  [
    1, 
    "Test1", 
    "york", 
    53.95734, 
    -1.086833, 
    "test1"
  ], 
  [
    2, 
    "Test2", 
    "york", 
    53.961533, 
    -1.085244, 
    "test2"
  ], 
  [
    3, 
    "Test3", 
    "york", 
    53.963051, 
    -1.078202, 
    "test3"
  ], 
  [
    4, 
    "Test4", 
    "york", 
    53.963104, 
    -1.082185, 
    "test4"
  ]
   ]

なぜこれがこのように出力されず、私がやらなければならないことであると私が信じているこのような列名が付いていないのか分かりません。

[
{"name": "test1"
 "address": "york"
  "lat" : "53.963104"}
]

列ヘッダーを文字列またはキーとして返すのが最善であるかどうかまだ解決する必要がありますが、どちらかのオプションを試してどれが最適に機能するかを確認できます。後者のような出力を返す方法に関する支援があれば、大歓迎です。

どうもありがとう

これは、エラーTypeError: 'int'オブジェクトに属性 'getitem'がない最新のコードです。

@testRestServer.route("/dbMap", methods=['GET', 'POST'])
def getData():
    #    cursor.execute("SELECT * FROM locations ")
    #    return jsonify(cursor.fetchall())

    records = cursor.execute("SELECT * FROM locations ")
    payload = []
    content = {}
    for result in range(records):
        content = {'id': result[0], 'name': result[1], 'address': result[2], 'lat': result[3], 'lon': result[4], 'description': result[5]}
        payload.append(content)
        return jsonify(payload)
1
user8173599

そのためには、結果セットから独自のjson配列を作成する必要があります

最後のlonは推測にすぎませんが、ドリフトが発生します。

@testRestServer.route("/dbMap", methods=['GET', 'POST'])
def getData():
    records = cursor.execute("SELECT * FROM markers ")
    payload = []
    content = {}
    for result in records :
        content = {'name': result[4], 'address': result[1], 'lat': result[2], 'lon': result[3]}
        payload.append(content)
        content = {} 
    return jsonify(payload)
0
nbk

だから、少し狩りと適応をして、別の方法で問題を解決しました。将来、他の誰かがこれに似た問題を抱えている場合に備えて、ここに投稿します。

Jsonを正しく機能させるためにサーバーで完了したルートは

@ testRestServer.route( "/ dbMap"、methods = ['GET'、 'POST'])def getData():

cursor.execute('''SELECT * FROM locations ''')
row_headers = [x[0] for x in cursor.description]  # this will extract row headers
rv = cursor.fetchall()
json_data = []
for result in rv:
    json_data.append(dict(Zip(row_headers, result)))
return json.dumps(json_data)
1
user8173599