简体   繁体   English

jsonify中的字符串错误(结果)-Flask,SQLAlchemy

[英]string error in jsonify(results) - Flask, SQLAlchemy

I am working with a flask app that queries my sqlite db and pulls out info on number of disease cases in each state in each year. 我正在使用一个烧瓶应用程序,该应用程序查询我的sqlite数据库并提取每年每个州的疾病病例数信息。 The route below pulls the correct data, but for some reason, will print not out the strings such as "Cases_2010", "Rate_2010, etc" that are in the request. 下面的路由提取正确的数据,但是由于某些原因,将不会打印出请求中的字符串,例如“ Cases_2010”,“ Rate_2010等”。 Is this is problem with the string itself or the concatenation? 这是字符串本身还是串联的问题? It does print the "State" string, just not any after that. 它确实打印“状态”字符串,之后不会再打印。

from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine, func, desc
from flask import Flask, jsonify
import json
import numpy as np
import os


engine = create_engine("sqlite:///westnile_1.sqlite")

Base = automap_base()
Base.prepare(engine, reflect=True)

Disease_Data = Base.classes.disease_data 

session = Session(engine)

app = Flask(__name__)

@app.route("/")
def home():
    return(
        f"Welcome to the West Nile Virus Case Report API <br>"
        f"Available routes: <br>"
        f"/api/v1.0/Cases_per_year_2010_2017 <br>"
        f"/api/v1.0/case_totals <br>"
        f"/api/v1.0/json_combined <br>")


@app.route("/api/v1.0/Cases_per_year_2010_2017")
def cases_2010_2017():

    results_10 = session.query("State: " + Disease_Data.State, "Cases_2010: " + Disease_Data.Cases_2010, "Rate_2010: " + Disease_Data.Rate_2010,
        "Cases_2011: " + Disease_Data.Cases_2011, "Rate_2011: " + Disease_Data.Rate_2011,
        "Cases_2012: " + Disease_Data.Cases_2012, "Rate_2012: " + Disease_Data.Rate_2012,
        "Cases_2013: " + Disease_Data.Cases_2013, "Rate_2013: " + Disease_Data.Rate_2013,
        "Cases_2014: " + Disease_Data.Cases_2014, "Rate_2014: " + Disease_Data.Rate_2014,
        "Cases_2015: " + Disease_Data.Cases_2015, "Rate_2015: " + Disease_Data.Rate_2015,
        "Cases_2016: " + Disease_Data.Cases_2016, "Rate_2016: " + Disease_Data.Rate_2016,
        "Cases_2017: " + Disease_Data.Cases_2017, "Rate_2017: " + Disease_Data.Rate_2017).all()     

    json2010 = json.dumps(results_10)

    return jsonify(results_10)

results_10 results_10

sqlite db sqlite数据库

updated output of return jsonify (json2010) 更新返回的jsonify输出(json2010)

As I don't have any info on ORM hence I am assuming Orm has the exact number of columns as the table has. 由于我没有有关ORM的任何信息,因此我假设Orm具有与表一样的确切列数。

results_10 = session.query(Disease_Data).all() # This will return the list of Disease_Data objects
json_list= []
for result in results_10:
    temp_dict = result.__dict__
    temp_dict.pop('_sa_instance_state',None)
    json_list.append(temp_dict) 
    # OR
    # temp_dict = dict(result)
    # temp_dict.pop('_sa_instance_state',None) # removing unwanted key
    # json_list.append(dict(result)) #Either of two should work

json2010 = json.dumps(json_list)

return jsonify(results_10)

I could not test it on my local but should give an idea. 我无法在本地测试,但应该给出一个想法。

In case you want to keep the format of the data: 如果要保留数据格式:

column_list = Disease_Data.__table__.columns.keys()
results_10 = session.query(Disease_Data).all() # This will return the list of Disease_Data objects
    json_list= []

    for result in results_10:
        temp_dict={}
        for col in column_list:
            temp_dict[col] = getattr(result,col) 
        json_list.append(temp_dict)
    json2010 = json.dumps(json_list)

return jsonify(results_10)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM