Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 01.12.2022
Сообщений: 3

SQL запрос для tg бота не фильтруется по WHERE

26.06.2023, 04:53. Показов 1092. Ответов 3

Студворк — интернет-сервис помощи студентам
Пишу тг бота для заявок. База данных с таблицей users, колонками userid, application, AppStatus. В таблицу записывается id пользователя, текст заявки и изменяется статус заявки.
id записывается без проблем, но когда дело доходит до текста заявки которая должна записываться только в строчку с нужным id в бд остаётся 0(поставил значение по дефолту), так же и с статусом заявки. Если убрать WHERE то заявка заносится в бд, но понятно что во все записи. Захардкодить id не получилось, так же ничего не записывает.

Вот функции с sql командами:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.cursor = self.connection.cursor()
        
    def add_user(self, user_id):
        with self.connection:
            return self.cursor.execute("INSERT INTO 'allusers' ('id') VALUES (?)", (user_id,))
        
    def add_idInUser(self, user_id):
        with self.connection:
            return self.cursor.execute("INSERT INTO 'users' ('userid') VALUES (?)", (user_id,))
            
            
    def user_exists(self, user_id):
        with self.connection:
            result = self.cursor.execute("SELECT * FROM 'allusers' WHERE 'id' = ?", (user_id,)).fetchall()
            return bool(len(result))
      
    def set_application(self, user_id, application):
        with self.connection:
            return self.cursor.execute("UPDATE 'users' SET 'application' = ? WHERE 'userid' = ?", (application, user_id,))
    
    def set_appstat(self, user_id, AppStatus):
        with self.connection:
            return self.cursor.execute("UPDATE 'users' SET 'AppStatus' = ? WHERE 'userid' = ?", (AppStatus, user_id,))
 
    def commit(self):
        with self.connection:
            return self.connection.commit()
Ожидание сообщения от пользователя сделана через машину состояний, маркапы в отдельном файле
вот код самого бота:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import StatesGroup, State
from db import Database
import markups as nav
 
TOKEN = 'Мой токен'
 
logging.basicConfig(level=logging.INFO)
 
storage = MemoryStorage()
bot = Bot(token = TOKEN)
dp = Dispatcher(bot, storage = storage)
 
db = Database('applicationsDB.db')
 
 
class ApplicationStateGroup(StatesGroup):
    application = State()
 
@dp.message_handler(commands=['start'])
async def start(message: types.Message):
 
    if (not db.user_exists(message.from_user.id)):
        
        db.add_user(message.from_user.id)
        db.commit()
        
        db.add_idInUser(message.from_user.id)
        db.commit()
        
        await bot.send_message(message.from_user.id, 'Здравствуйте, выберете одну из кнопок', reply_markup=nav.mainMenu)
 
    else:
        await bot.send_message(message.from_user.id, 'Здравствуйте, выберете одну из кнопок', reply_markup=nav.mainMenu)
 
 
@dp.message_handler()
async def bot_message(message: types.Message):
    if message.text == 'Создать заявку':
        await bot.send_message(message.from_user.id, 'Введите ваше ФИ, номер кабинета и опишите проблему')
        await ApplicationStateGroup.application.set()
        
    else:
        pass
 
@dp.message_handler(content_types=['text'], state = ApplicationStateGroup.application)
async def load_application(message: types.Message, state: FSMContext):
    async with state.proxy() as data:
        data['application'] = message.text
 
        db.set_application(message.from_user.id, data['application'])
        db.commit()
 
        
        db.set_appstat(message.from_user.id, 'notcompleted')
        db.commit()
        
        await bot.send_message(message.from_user.id, 'Заявка успешно отправлена')
        await state.finish()
    
    
if __name__ == "__main__":
    executor.start_polling(dp, skip_updates = True)
воюю с ним уже дня 3, у парня из видео всё работало. Может кто знает в чем дело. Буду благодарен
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2023, 04:53
Ответы с готовыми решениями:

Не фильтруется запрос
Здравствуйте, помогите пожалуйста, у меня есть таблица с иминами фамилиями и прочей ерундой, мне надо вывести в алфавитном порядке все...

База фильтруется в XP но не фильтруется в Windows2000
Пожалуйста помоги не знаю что делать. Сделал проект в delphi с БД access связал технология ADO сделал там фильтрации сортировки форму...

Настройка SQL базы данных для ТГ бота
Доброго вечера, прошу у знающих людей помощи, объясните что я делаю не так! Скачал ТГ бота автошопа на питоне. Всё поставил, бот...

3
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
27.06.2023, 19:13
Цитата Сообщение от Kerel Посмотреть сообщение
INSERT INTO 'allusers' ('id') VALUES (?)
Вы в каком мануале/учебнике по sql прочитали, что имена таблиц/полей можно оборачивать в одинарные кавычки?
1
0 / 0 / 0
Регистрация: 01.12.2022
Сообщений: 3
28.06.2023, 06:51  [ТС]
Делал по видео с ютьюба, у парнишки всё работало, но и у меня с кавычками всё работает кроме where
0
 Аватар для kazak
3601 / 2742 / 355
Регистрация: 11.03.2009
Сообщений: 6,300
30.06.2023, 16:24
В большинстве БД в SQL строка в одинарных кавычках обозначает строковый литерал. Имена столбцов/таблиц пишут либо без кавычек, либо, если имена схожи с зарезирвированными словами, в обратных одинарых кавычках
SQL
1
2
'строковый литерал'
`имя столбца/таблицы`
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.06.2023, 16:24
Помогаю со студенческими работами здесь

Адаптировать SQL запрос в запрос для access
Помогите пожалуйста: имеется вот такой рабочий запрос созданный в exel. но так как Exel перестал вывозить разросшиюся базу перевозим все...

SQL запрос в Query для соединения двух таблиц для Qreport
Время поджимает. Некогда думать самому. Есть две таблицы парадокс. в первой есть поле код_товара и название_товара. во второй поле...

Запрос для SQL
Вывод количества сообщений из топика конкретной темы. Выводит ноль. $top=$_GET; $query3=mysqli_query($db, "SELECT COUNT(*)...

SQL запрос для ID
Всем привет. Дано какая-то таблица с данными где есть ID. И у ID следующая последовательность 1,2,3,4,5,6,7,8,9,10,11, 22,23,24,... ...

Запрос от бота
@bot.inline_handler(lambda query: len(query.query) > 0) Написано с библиотекой aiogram, но я не понимаю при каких условиях функция...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru