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

如何用Python sqlite3查询typeOfPlace列匹配指定值的行

完成基于typeVar的place表查询功能

没问题,我来帮你把这个查询功能补全。首先得强调一句:处理用户输入的查询时,一定要用参数化查询,绝对不能直接拼接字符串,这是避免SQL注入风险的核心原则。下面是完整的实现代码:

import sqlite3

# 假设typeVar已经存储了用户输入的值,比如"restaurant"或"museum"
typeVar = "restaurant"

try:
    # 连接到SQLite数据库(如果指定的数据库文件不存在,会自动创建)
    connection = sqlite3.connect("your_database_name.db")  # 替换成你的实际数据库文件名
    cursor = connection.cursor()

    # 用参数化查询语句,?是SQLite的占位符
    query = "SELECT * FROM place WHERE typeOfPlace = ?;"
    # 注意第二个参数要传元组,哪怕只有一个参数也要加逗号
    cursor.execute(query, (typeVar,))

    # 获取所有匹配的记录
    matching_records = cursor.fetchall()

    # 处理查询结果示例
    if matching_records:
        print(f"找到{len(matching_records)}条类型为{typeVar}的记录:")
        for record in matching_records:
            print(f"名称: {record[0]}, 纬度: {record[1]}, 经度: {record[2]}, 地址: {record[3]}, 类型: {record[4]}")
    else:
        print(f"没有找到类型为{typeVar}的记录")

except sqlite3.Error as e:
    print(f"数据库操作出错啦:{e}")
finally:
    # 不管有没有出错,都要确保关闭游标和连接,释放资源
    if cursor:
        cursor.close()
    if connection:
        connection.close()

几个关键细节说明:

  • 参数化查询的必要性:用?占位符替代直接拼接typeVar,能彻底避免用户输入恶意SQL语句破坏数据库的风险,这是生产环境必须遵守的规范。
  • 异常处理:用try-except捕获SQLite可能抛出的错误,比如数据库文件权限问题、表不存在等,让程序更健壮。
  • 资源清理:finally块里的关闭操作能保证即使中间出现错误,数据库连接也不会一直占用系统资源。

如果你的需求是模糊匹配(比如要找包含某个关键词的场所类型),可以把查询语句改成这样:

query = "SELECT * FROM place WHERE typeOfPlace LIKE ?;"
cursor.execute(query, (f"%{typeVar}%",))  # %是SQL的通配符,匹配任意长度的字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:29:17