Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/29: Рейтинг темы: голосов - 29, средняя оценка - 5.00
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495

Добавить данные в бд таблицу собранные ботом

15.11.2020, 01:46. Показов 5983. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Пишу бот-опросник на питоне для ТГ. Данные кладу в объект, который я создал ранее.
Так же я создал бд с помощью SQLighter. В конце опроса закидываю данные в бд, и мне выскакивает ошибка:
TypeError: object NoneType can't be used in 'await' expression
Сюда приложу код:
main
Python
1
storage = User_Data(None, None, None, None, None, None, None)
Python
1
2
3
4
5
@dp.callback_query_handler(lambda c: c.data == 'send')
def send_data_to_base():
if not db.user_exist(storage.user_id) == False:
    db.add_new_user(storage.user_id, storage.gender, storage.age, storage.salary, storage.gov_rate, 
storage.city_condition, storage.level_of_development)
Класс User_data
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
class User_Data:
    def __init__(self, user_id, gender, age, salary, gov_rate, city_condition, level_of_development):
        self.user_id = user_id
        self.gender = gender
        self.age = age
        self.salary = salary
        self.gov_rate = gov_rate
        self.city_condition = city_condition
        self.level_of_development = level_of_development

database
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sqlite3
 
class SQLighter:
def __init__(self, database):
    self.connection = sqlite3.connect(database)
    self.cursor = self.connection.cursor()
 
def get_info(self):
    with self.connection:
        return self.cursor.execute("SELECT * FROM `answers`").fetchall()
 
def user_exist(self, user_id):
    with self.connection:
        result = self.cursor.execute("SELECT * FROM `answers` WHERE `user_id` = ?", (user_id,)).fetchall()
        return bool(len(result))
 
def add_new_user(self, user_id, gender, age, salary, gov_rate, city_condition, level_of_development):
    with self.connection:
        return self.cursor.execute("INSERT INTO `answers` (`user_id`, `gender`, `age`, `salary`, `gov_rate`, `city_condition`, `level_of_development`) VALUES(?,?,?,?,?,?,?)", (user_id, gender, age, salary, gov_rate, city_condition, level_of_development))
Объект проверял на пустоту - он не пустой.

Так же, хотел бы узнать такое: бот собирает данные на клиентской стороне или на серверной? Имею введу, что если мой опрос буду проходить два и более людей одновременно, то будет ли работать мой способ сбора данных: данные в объект, а в конце опроса объект в бд?

PS: ботов никогда не писал, пользуюсь aiogram либой.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2020, 01:46
Ответы с готовыми решениями:

Не получается разделить собранные данные с with Pool
Я многопоточно собираю все языки на которых программировали определенные пользователи, и когда добавляю в список эти языки, тогда языки от...

Обновить данные в БД собранные в одном гриде
И как вы собираетесь обновлять данные в представлении, которое создано в базе? Один черт - все что сложнее - "клиент арендовал...

Не получается разделить собранные данные которые собрал многопоточно
Я многопоточно собираю все языки на которых программировали определенные пользователи, и когда добавляю в список эти языки, тогда языки от...

1
 Аватар для Iangyl
32 / 34 / 21
Регистрация: 31.03.2018
Сообщений: 495
16.11.2020, 03:27  [ТС]
Лучший ответ Сообщение было отмечено DmFat как решение

Решение

Я решил эту проблему. Так, как исправить?

Эта ошибка значит, что я беру синхронную функцию и использую её как асинхронную, а т.к. функция в моём случае вернула None, получилась ошибка:
TypeError: object NoneType can't be used in 'await' expression

Aiogram - является асинхронной библиотекой у которого хэндлеры должны быть асинхронными. Поэтому мне нужно было добавить к своему хэндлеру async и проблема решилась.

Код:
Python
1
2
3
4
@dp.callback_query_handler(lambda c: c.data == 'send')
async def send_data_to_base():
    if not db.user_exist(storage.user_id):
        await db.add_new_user(storage.user_id, storage.gender, storage.age, storage.salary, storage.gov_rate, storage.city_condition, storage.level_of_development)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2020, 03:27
Помогаю со студенческими работами здесь

Преобразовать собранные данные в графический вид в Excel'e (Performance Monitor)
Как можно сохраненный график: открыть в Excel'e и преобразовать в читаемый, графический вид? На данный момент у меня всё выглядит...

Добавить данные в таблицу
Всем знатокам привет. Дано: - простенькая табличка MySQL Использую: XAMPP Нужно с помощью страницы insert.php добавить...

Добавить данные в таблицу
Доброе время суток. Что то я туплю в понедельник с утра. Есть две обсалютно одинаковые таблицы. Из одной надо добавить данные в другую. ...

Добавить данные в таблицу
Как занести ответ из (sum) в таблицу (table1) в базе (project) @1,1 say ' vvedite a' get num1; default 0 size 1,10 read @2,1 say '...

Как в таблицу добавить данные?
insert into добавляет одну, а мне надо несколько, других таблиц нет и values (...),(...),(...) не работает


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru