RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1430762
Accepted
mc_vovi
mc_vovi
Asked:2022-07-18 19:08:23 +0000 UTC2022-07-18 19:08:23 +0000 UTC 2022-07-18 19:08:23 +0000 UTC

具有多个 WHERE 子句的 SQLite 查询不起作用

  • 772

我正在用 aiogram,python 编写一个电报机器人。有需要使用数据库,写了如下查询:

for value in cur.execute("SELECT field FROM vlnt_table WHERE faculty = ? AND university = ?", (faculty_pressed, university_pressed)):
    current_value = str(value)
    fields_list.append(current_value)

但是,此代码不起作用,会引发错误:

sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.

我检查了所有变量,将它们与数据库中的值相关联,尝试使用每个 Faculty_pressed 和 university_pressed 变量编写两个单独的查询(它们有效),但是在一个 WHERE 中,它们不起作用。我正是需要这两个条件,请告诉我问题是什么!如果可以选择使用两个查询来实现这些条件,我会很高兴(我需要在一个循环中使用它)

upd:显示我放入变量的内容:

faculty_pressed = (message.text[10:],)


async with state.proxy() as abit_filter:
    abit_filter['university'] = (message.text[12:],)
university_pressed = abit_filter['university']

这就是我检查是否有匹配项的方式:

for value in cur.execute('SELECT university FROM vlnt_table'):
    print(value)
    if value == university_pressed:
        print('Должно работать!!')

我会放弃整个功能,也许:

async def cmd_abit_filters_faculty(message: types.Message, state = FSMContext):
async with state.proxy() as abit_filter:
    abit_filter['faculty'] = (message.text[10:],)
    university_pressed = abit_filter['university']
faculty_pressed = (message.text[10:],)
print(abit_filter['university'])
fields_list = []
for value in cur.execute('SELECT university FROM vlnt_table'):
    print(value)
    if value == university_pressed:
        print('Должно работать!!')
for i in cur.execute("SELECT field FROM vlnt_table WHERE (faculty = ?) AND (university = ?)", (faculty_pressed, university_pressed)):
    current_value = str(value)
    current_value = current_value.replace('(', '')
    current_value = current_value.replace(')', '')
    current_value = current_value.replace("'", "")
    current_value = current_value.replace(',', '')
    fields_list.append(current_value)
base.commit()
fields_set = list(set(fields_list))
fields_set = fields_list
kb_fields = ReplyKeyboardMarkup(resize_keyboard=True)
for i in fields_set:
    kb_fields.add(f"Направление {i}")
await FSMFilters.next()
await bot.send_message(message.from_user.id, 'Выберите направление подготовки, о котором хотели бы узнать', reply_markup=kb_fields)
python база-данных
  • 1 1 个回答
  • 55 Views

1 个回答

  • Voted
  1. Best Answer
    Roman-Stop RU aggression in UA
    2022-07-19T00:36:01Z2022-07-19T00:36:01Z

    整个问题是您错误地使用execute了游标方法,即您错误地传递了请求参数,即 函数的第二个参数execute。

    如果您有一个包含多个参数的请求,即 传递给请求的值并在请求文本本身中用问号设置它们,那么第二个参数必须是列表或元组,其中第一个问号对应于第一个参数的值,第二个到第二个的值,等等。

    关于你的请求的例子SELECT field FROM vlnt_table WHERE (faculty = ?) AND (university = ?)。您有两个参数(也称为有界变量)。据我了解,字段faculty和university数据库中的行。这意味着execute您需要传递一个列表或两个字符串的元组中的第二个参数。

    您正在传递两个元素的元组,但第一个不是字符串,而是一个元素的元组(例如,这('КБ',)是一个字符串的元组),您在此处创建:

    faculty_pressed = (message.text[10:],)
    

    当您对单个元素进行查询时,您将该单元素元组作为第二个参数传递给execute,并且它起作用了,因为这正是它所execute期望的 - 与查询中的参数一样多的元素的列表或元组(在这种情况一)。

    当您有两个参数时,正如我上面所说,您需要传递两个元素的元组。就您而言,这意味着您需要这样做:

    faculty_pressed = message.text[10:]
    

    您还需要确保它university_pressed包含一个包含列中值的字符串university(我仍然无法从您的回答中了解该值是什么以及它是什么类型),然后这样的调用将按预期工作:

    cur.execute("SELECT field FROM vlnt_table WHERE (faculty = ?) AND (university = ?)", (faculty_pressed, university_pressed))
    
    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5