如何从 flask 中的Sqlite返回json[复制]

pftdvrlh  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(220)

这个问题在这里已经有答案

Why do these list operations (methods: clear / extend / reverse / append / sort / remove) return None, rather than the resulting list?(4个答案)
四年前就关门了。
我尝试从数据库的json列表返回城市,但在执行代码并打开/City端点后,浏览器返回“NULL”,而不是[“City1”,“City2”,“City3”,...]

from flask import (
    Flask,
    g,
    redirect,
    render_template,
    request,
    url_for,
    jsonify,
)
import sqlite3

app = Flask(__name__)

DATABASE = 'database.db'

def get_db():
    db = getattr(g, '_database', None)
    if db is None:
        db = g._database = sqlite3.connect(DATABASE)
        db.row_factory = sqlite3.Row
    return db

@app.teardown_appcontext
def close_connection(exception):
    db = getattr(g, '_database', None)
    if db is not None:
        db.close()     

@app.route('/city')
def city_list():
    db = get_db()
    data = db.execute('SELECT city FROM city').fetchall()

    return jsonify(data.append(list(data)))

你知道我哪里出了错,怎么改正吗?当我将其返回到render模板和一个for循环时,一切都正常了。
不幸的是

return(data)

浏览器返回

builtins.TypeError
TypeError: <sqlite3.Row object at 0x7ff31dfb32b0> is not JSON serializable
jdg4fx2g

jdg4fx2g1#

.append()始终返回NONE,因为它会就地修改。
但我根本不明白为什么要调用append;这里没有要追加的内容。只需返回jsonalized数据即可:

return jsonify(list(data))

(事实上,您甚至可能不需要这个列表--只需要jsonify(data)就可以了。)

相关问题