mons_r = request.form.getlist ('mons_r') cursor.execute("SELECT * FROM detail_05 WHERE 子类别=%s AND 记录人=%s AND 月份 in ()" , (prj_r, researcher, mons_r)) 修改代码,月份的筛选条件为mons_r
时间: 2024-03-15 12:47:27 浏览: 18
好的,根据您的需求,您可以将代码修改为以下内容:
```
mons_r = request.form.getlist('mons_r')
mons_r_placeholder = ','.join(['%s' for _ in range(len(mons_r))])
query = "SELECT * FROM detail_05 WHERE 子类别=%s AND 记录人=%s AND 月份 in ({})".format(mons_r_placeholder)
params = (prj_r, researcher) + tuple(mons_r)
cursor.execute(query, params)
```
这里我使用了字符串格式化技术来动态生成 SQL 查询语句,在其中加入了占位符 `{}`,表示后面要填充一个逗号分隔的参数列表。在执行查询时,将参数列表传递给 `cursor.execute()` 函数即可,其中第一个参数是格式化后的查询语句,第二个参数是一个元组,其中包含了所有要填充的参数值。
相关问题
prj_m = request.form.get('prj_m') mons_m = request.form.getlist('mons_m') TypeError: can only concatenate list (not "tuple") to list print(prj_m) print(mons_m) session['prj_m'] = prj_m session['mon_m'] = mons_m # 获取该项目经理的该项目的明细 mons_m_placeholder = ','.join(['%s' for _ in range(len(mons_m))]) query = "SELECT * FROM detail_05 WHERE 子类别=%s AND 月份 in ({})".format(mons_m_placeholder) params = [prj_m] + tuple(mons_m) cursor.execute(query, params) details_m = cursor.fetchall() print(details_m)
这段代码出现了一个 TypeError,提示不能将元组(tuple)与列表(list)相加。具体来说,是在第 2 行中,mons_m 是一个列表,但在第 8 行中,params 是一个元组,所以不能将它们相加。可能需要将 params 转换为一个列表,例如将第 8 行改为:
params = [prj_m] + list(mons_m)
这样就可以将两个列表相加了。
sql = 'SELECT * FROM budget_2023 WHERE 项目名称=? AND ({})'.format(' OR '.join(['{}=?'.format(m) for m in mons_m])) cursor = conn.cursor() cursor.execute(sql, [prj_m] + mons_m) budgets = cursor.fetchall() print('budget', budgets)prj_m是一个字符,mons_m是个列表。TypeError: not all arguments converted during string formatting报错这个,为什么呢?
这个错误通常是因为在SQL语句中使用了占位符,但是在使用execute()方法时没有为所有占位符提供参数。在你的代码中,SQL语句中有一个占位符'?',但是在execute()方法中提供的参数列表中可能没有足够的参数来替换该占位符。
你可以使用print()语句来检查一下SQL语句和参数列表是否正确。另外,你也可以使用try...except块来捕获这种类型的错误,以便更好地调试代码。