You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中从SQLite返回JSON?城市列表返回null问题排查

解决Flask从SQLite返回城市JSON列表时出现null的问题

嘿,我来帮你搞定这个问题!你遇到的Flask返回null而不是预期城市列表的问题,主要是代码里的几个小疏漏和错误导致的,咱们一步步梳理修复:

一、先揪出你代码里的明显问题

  • 你写的db.row_factory = sqlit...是拼写错误!应该是sqlite3.Row(这个是用来让查询结果以字典形式返回的行工厂),这会直接导致数据库查询的结果处理异常。
  • 目前你的代码里没有/city对应的路由函数,也看不到执行数据库查询的逻辑——没有查询怎么会返回城市列表呢?这肯定会返回null或者报错。
  • 还缺少数据库连接的自动关闭逻辑,长期运行可能会导致连接泄漏。

二、修正后的完整可运行代码

from flask import Flask, g, 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)
        # 修正拼写错误,设置行工厂为sqlite3.Row,支持按列名取数据
        db.row_factory = sqlite3.Row
    return db

# 请求结束后自动关闭数据库连接,避免泄漏
@app.teardown_appcontext
def close_db_connection(exception):
    db = getattr(g, '_database', None)
    if db is not None:
        db.close()

# 封装一个通用查询函数,简化SQL执行操作
def query_db(query, args=(), one=False):
    cur = get_db().execute(query, args)
    results = cur.fetchall()
    cur.close()
    # 如果one为True,返回单个结果;否则返回所有结果
    return (results[0] if results else None) if one else results

# 这就是你需要的/city路由
@app.route('/city')
def fetch_cities():
    # 假设你的城市表名为cities,存储城市名的字段是name
    # 这里根据你的实际表结构修改!
    city_records = query_db('SELECT name FROM cities')
    # 从查询结果中提取城市名称,转为列表
    city_list = [record['name'] for record in city_records]
    # 用jsonify返回标准JSON响应
    return jsonify(city_list)

if __name__ == '__main__':
    app.run(debug=True)

三、关键修复点解释

  1. 修正行工厂拼写:把半截的sqlit...改成sqlite3.Row,这样查询出来的每一行都可以像字典一样通过列名访问,方便提取城市名称。
  2. 添加连接自动关闭:用@app.teardown_appcontext装饰的函数会在每个请求结束后自动关闭数据库连接,避免资源浪费。
  3. 封装查询逻辑:query_db函数帮你处理游标、执行SQL、获取结果的重复工作,让路由代码更简洁。
  4. 正确提取并返回数据:从查询到的记录中提取城市名称组成列表,再用jsonify返回——这样浏览器就能拿到你预期的["city1", "city2", ...]格式的JSON了。

四、额外要检查的地方

  • 确认你的database.db里真的有cities表,而且name字段确实存着城市名称,如果表名或字段名不一样,记得修改SELECT name FROM cities里的内容。
  • 开启debug模式(代码里的app.run(debug=True)),如果还有问题,控制台会输出详细错误信息,方便你进一步排查。

内容的提问来源于stack exchange,提问作者derriadiergummi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:26:13