首页 > 解决方案 > 根据sqlite python中的用户选择更改查询

问题描述

我有一个名为 StudentDB 的 sqlite 数据库,它有 3 列 Roll number、Name、Marks。现在我只想获取用户在 IDE 中选择的列。用户可以选择一列或两列或全部三列。如何使用 Python 相应地更改查询?

我试过了:

import sqlite3

sel={"Roll Number":12}

query = 'select * from StudentDB Where({seq})'.format(seq=','.join(['?']*len(sel))),[i for k,i in sel.items()]
con = sqlite3.connect(database)
cur = con.cursor()
cur.execute(query)

all_data = cur.fetchall()
all_data

我正进入(状态:

operation parameter must be str

标签: pythonsqlite

解决方案


您应该控制查询的文本。如果要构建参数化查询,where 子句应始终采用WHERE colname=value [AND colname2=...]或(更好)形式。WHERE colname=? [AND ...]

所以你要:

query = 'select * from StudentDB Where ' + ' AND '.join('"{}"=?'.format(col)
                                                        for col in sel.keys())
...
cur.execute(query, tuple(sel.values()))

推荐阅读