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

Python SQLite3跨表参数选元素及按国家名称查城市的实现方法

嘿,我来帮你搞定这两个和SQLite、Flask相关的问题:

问题1:Python操作SQLite3时,如何通过另一个表的参数选择元素?

要实现这个需求,核心是用SQL的JOIN语句把两个关联的表连接起来,然后通过关联表的字段来过滤数据。举个例子,假设你有city和country两个表(和问题2的结构一致),想通过国家名称筛选对应的城市,具体实现如下:

  1. 用JOIN关联city和country表(通过共同的country_id字段建立关联)
  2. 在WHERE子句里使用country表的目标字段(比如country.country)来过滤结果
  3. 用参数化查询传递参数,避免SQL注入风险

下面是Python操作SQLite3的示例代码:

import sqlite3

# 连接数据库
conn = sqlite3.connect('your_database.db')
cursor = conn.cursor()

# 要查询的目标国家名称
target_country = "Poland"

# 执行关联查询,通过国家名称筛选城市
cursor.execute('''
    SELECT city.city 
    FROM city
    JOIN country ON city.country_id = country.country_id
    WHERE country.country = ?
''', (target_country,))

# 获取查询结果
results = cursor.fetchall()

# 格式化结果为列表
cities = [city[0] for city in results]
print(cities)

# 关闭数据库连接
conn.close()
问题2:修改Flask接口,通过国家名称而非country_id获取城市列表

你原代码里已经完成了city和country表的关联,只需要调整WHERE条件,同时改成参数化查询来接收前端传递的国家名称参数,既满足需求又能避免SQL注入风险。

修改后的代码如下:

from flask import Flask, request, jsonify
# 假设你的get_db()函数已经正确实现了数据库连接逻辑

@app.route('/citiess')
def city_list3():
    # 从URL查询参数中获取国家名称,增加参数缺失的判断
    country_name = request.args.get('country_name')
    if not country_name:
        return jsonify({"error": "请提供country_name参数"}), 400
    
    db = get_db()
    # 修改WHERE条件为使用country表的country字段,并用参数化传递值
    data = db.execute('''
        SELECT city FROM city
        JOIN country ON city.country_id = country.country_id
        WHERE country.country = ?
    ''', (country_name,)).fetchall()
    
    # 简化结果格式化逻辑
    data_json = [item[0] for item in data]
    return jsonify(data_json)

关键修改点说明:

  • 用request.args.get('country_name')获取URL查询参数(比如请求/citiess?country_name=Poland就能获取波兰的城市列表)
  • 将WHERE条件从固定的city.country_id = 76改为country.country = ?,直接通过国家名称过滤数据
  • 使用参数化查询的?占位符传递country_name,彻底避免SQL注入攻击
  • 增加了参数缺失的判断,返回友好的错误提示,提升接口健壮性

内容的提问来源于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 08:38:48