Форум программистов, компьютерный форум, киберфорум
Python: API, боты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
Telegram Bot

Запись в SQLite3

21.06.2022, 22:08. Показов 1528. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, вопрос такой, можно ли редактировать одну и ту же запись в SQLite чтобы не получалось так как на скрине. Код представлен снизу

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import telebot
import sqlite3
import time
 
#Создали переменную бота
bot = telebot.TeleBot('5243181247:AAH3v5GnK7zsUGaHTZzcusCavHfQ2JzUTtA')
 
db = sqlite3.connect('database.db')
cur = db.cursor()
 
cur.execute('''CREATE TABLE IF NOT EXISTS patients(id INT,
            date TEXT,
            question1 TEXT,
            question21 TEXT,
            question22 TEXT,
            question23 TEXT,
            question24 TEXT,
            question25 TEXT,
            question26 TEXT,
            question27 TEXT,
            question28 TEXT,
            question29 TEXT,
            question210 TEXT,
            question211 TEXT,
            question212 TEXT,
            question213 TEXT,
            question214 TEXT,
            question3 TEXT,
            question4 TEXT,
            question5 TEXT,
            question61 TEXT,
            question62 TEXT,
            Comleted TEXT,
            firstinit TEXT,
            PRIMARY KEY(id,date))''')
cur.execute('''CREATE TABLE IF NOT EXISTS doctors(id INT,
            number TEXT,
            PRIMARY KEY(id))''')
cur.execute('''CREATE TABLE IF NOT EXISTS patientsnumbers(id INT,
            number TEXT,
            PRIMARY KEY(id))''') 
db.commit()
 
tconv = lambda x: time.strftime("%d.%m.%Y", time.localtime(x))
 
keyboard_answer1 = telebot.types.ReplyKeyboardMarkup(True)
keyboard_answer1.row('0','1','2','3','4','5')
keyboard_answer2 = telebot.types.ReplyKeyboardMarkup(True)
keyboard_answer2.row('0','1','2','3')
 
 
@bot.message_handler(commands=['start'])
def start_message(message):
  start_buttons = telebot.types.ReplyKeyboardMarkup(True)
  button_patient = telebot.types.KeyboardButton("Пaциeнт")
  button_doctor = telebot.types.KeyboardButton("Дoктop")
  start_buttons.add(button_patient,button_doctor)
  db = sqlite3.connect('database.db')
  cur = db.cursor()
  question1 = '0'
  question21 = '0'
  question22 = '0'
  question23 = '0'
  question24 = '0'
  question25 = '0'
  question26 = '0'
  question27 = '0'
  question28 = '0'
  question29 = '0'
  question210 = '0'
  question211 = '0'
  question212 = '0'
  question213 = '0'
  question214 = '0'
  question3 = '0'
  question4 = '0'
  question5 = '0'
  question61 = '0'
  question62 = '0'
  Completed = '0'
  firstinit = '0'
  date = str(tconv(message.date))
  sp = [message.chat.id, date,question1,question21,question22,question23,question24,question25,question26,question27,question28,question29,question210,question211,question212,question213,question214,question3,question4,question5,question61,question62,Completed,firstinit]
  cur.execute('''INSERT or REPLACE INTO patients VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);''',sp)
  db.commit()
  bot.send_message(message.chat.id,"Здравствуйте выберите необходимую категорию",reply_markup=start_buttons)
 
@bot.message_handler()
def prov(message):
  msg = message.text
  if msg == "Пaциeнт":
    menu2(message)
  if msg == "Дoктop":
    pass
  
def menu2(message):
  menu_buttons = telebot.types.InlineKeyboardMarkup()
  button_opros = telebot.types.InlineKeyboardButton("Прoйти oпрoc ", callback_data = 'b1')
  button_primarydata = telebot.types.InlineKeyboardButton("Пeрвичные дaнныe ", callback_data = 'b2')
  menu_buttons.add(button_opros,button_primarydata)
  bot.send_message(message.chat.id,'Выберите необходимую функцию',reply_markup=menu_buttons)
 
 
@bot.callback_query_handler(func = lambda call:True)
def answer(call):
  if call.data == 'b1': 
      bot.send_message(call.message.chat.id, '''Вопрос 1''',reply_markup = keyboard_answer1)
      msg5 = bot.send_message(call.message.chat.id,'Выбирайте варианты соответсвующие вашему состоянию')
      question1 = call.message.text
      db = sqlite3.connect('database.db')
      cur = db.cursor()
      date = str(tconv(call.message.date))
      sp = [question1]
      cur.execute('''REPLACE INTO patients(question1) VALUES(?);''',sp)
      db.commit()
      bot.register_next_step_handler(msg5,qu21)
      
  if call.data == 'b2':
    pass
 
def qu21(message):
          #Вопрос 2-1
  msg = bot.send_message(message.chat.id, '''Вопрос 2''',reply_markup = keyboard_answer2)
  question21 = message.text
  db = sqlite3.connect('database.db')
  cur = db.cursor()
  an21 = [question21]
  cur.execute('''REPLACE INTO patients(question21) VALUES(?);''',an21)
  db.commit()        
  bot.register_next_step_handler(msg,qu22)
 
def qu22(message):
  msg = bot.send_message(message.chat.id, '''Вопрос 3''',reply_markup = keyboard_answer2)
  question22 = message.text
  db = sqlite3.connect('database.db')
  cur = db.cursor()
  an22 = [question22]
  cur.execute('''REPLACE INTO patients(question22) VALUES(?);''',an22)
  db.commit()
  msg2 = bot.send_message(message.chat.id,'Опрос пройден')
  bot.register_next_step_handler(msg2,menu2)
          
bot.polling()
Миниатюры
Запись в SQLite3  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.06.2022, 22:08
Ответы с готовыми решениями:

Запись данных в sqlite3
Добрый вечер. Есть есть программка с разными версиями,они расположены в разных папках и база у каждого своя с одинаковым именем,например...

SQLite3 запись данных
УВАЖАЕМЫЕ МОДЕРАТОРЫ!!! у меня создана подобная тема в разделе Unity, но почитав что библиотека мультиплатформенная решил создать тему и...

Запись значений в SQLite3
Здравствуйте. При записи в базу данных SQLite3 возникает ошибка Код from bs4 import BeautifulSoup import csv import sqlite3 ...

23
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.06.2022, 22:43
Цитата Сообщение от Nestert Посмотреть сообщение
можно ли редактировать одну и ту же запись в SQLite чтобы не получалось так как на скрине. Код представлен снизу
Одну и ту же с чем? Что именно на скрине показывает, как не должно быть?
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
21.06.2022, 22:47  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
Одну и ту же с чем?
Суть бота сбор информации, и имеется ввиду, чтобы при прохождении опроса результаты заносились в одну строку, а не так чтобы ответ на каждый вопрос переносился на другую строку таблицы.
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.06.2022, 22:56
Цитата Сообщение от Nestert Посмотреть сообщение
INSERT or REPLACE
Уверены, что INSERT OR REPLACE, a не UPSERT?
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
21.06.2022, 22:59  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
Уверены, что INSERT OR REPLACE, a не UPSERT?
Поэтому же и спрашиваю, что не уверен)) Первый раз работаю с ботами и SQLite3
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.06.2022, 23:00
и что
REPLACE INTO patients(question1) VALUES(?);
а не UPDATE
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
21.06.2022, 23:05  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
UPSERT
Если писать данную команду, то выдает ошибку:
sqlite3.OperationalError: near "UPSERT": syntax error
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.06.2022, 23:12
Лучший ответ Сообщение было отмечено Nestert как решение

Решение

Если UPSERT нет в той версии, что использует python, то можно заменить на INSERT ... ON CONFLICT ... DO UPDATE SET ...
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
21.06.2022, 23:26  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
INSERT ... ON CONFLICT ... DO UPDATE SET ...
UPDATE patients SET(question1)=(?);
А если попробовать вот так, как думаете сработает?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.06.2022, 23:41
Это все рабочие варианты, все зависит от того, что вы хотите получить на выходе.

Добавлено через 5 минут
дефолтные значения тоже можно указывать средствами sql
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
21.06.2022, 23:44  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
все зависит от того, что вы хотите получить на выходе.
Можно тогда еще несколько вопросов задать в ЛС?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.06.2022, 23:46
Тут задавайте.
Вот бесплатно совет - создайте сначала сильно упрощенный вариант того, что Вы делаете.
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
21.06.2022, 23:51  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
Тут задавайте.
Тогда:
1) Корректно ли каждый раз подключать базу, на каждом вопросе или можно подключить только на первом и закрыть на последнем?
2) Возможно ли как-то перейти к другой функции кроме bot.register_next_step_handler?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
21.06.2022, 23:56
Цитата Сообщение от Nestert Посмотреть сообщение
1) Корректно ли каждый раз подключать базу, на каждом вопросе или можно подключить только на первом и закрыть на последнем?
если предполагается что будет только один пользователь, то можно просто в начале открыть и в конце закрыть.

Цитата Сообщение от Nestert Посмотреть сообщение
2) Возможно ли как-то перейти к другой функции кроме bot.register_next_step_handler?
в aiogram есть FSM, посмотрите, может Вам больше понравится такой подход. В telebot, насколько я знаю, а про боты я очень мало знаю, поддерживает только register_next_step_handler для переходов.
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
22.06.2022, 00:32  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
если предполагается что будет только один пользователь
Вот как раз, несколько пользователей и если писать
Python
1
UPDATE patients SET(question1)=(?);
то обновляются все записи, а мне нужно только для одного пользователя который отвечал на вопрос
Миниатюры
Запись в SQLite3  
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.06.2022, 00:34
Цитата Сообщение от Nestert Посмотреть сообщение
Вот как раз, несколько пользователей и если писать
для этого есть WHERE clause
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
22.06.2022, 00:41  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
WHERE clause
А можно подробнее?
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.06.2022, 00:42
https://www.sqlitetutorial.net/sqlite-update/
1
0 / 0 / 0
Регистрация: 10.04.2019
Сообщений: 16
22.06.2022, 01:25  [ТС]
Цитата Сообщение от Jabbson Посмотреть сообщение
WHERE clause
Насколько я понял, это просто условие WHERE, но задать его не получается
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
22.06.2022, 01:33
Не получается – это не очень техническое описание проблемы.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2022, 01:33
Помогаю со студенческими работами здесь

Как не допустить запись дубликатов в SQLite3
Здравствуйте. Всех с наступившим Новым годом!!! Такой код базы. Хотел использовать PRIMARY KEY. Чтобы не было дубликата. При повторном...

Запись текстовых данных из массива в БД SQLite3
Всем привет! Проблема заключается вот в чем: в массиве находятся текстовые записи разной длинны (от 15 до 6000 знаков). При...

Как сделать запись в БД Sqlite3 с полей в боте
Условно есть бот и его код таков, что при нажатии кнопки, появляется сообщение введи емейл Больше ничего нет. Пользователь...

нужна рабочая связка sqlite3.dll + SQLite3.pas + SQLiteTable3.pas
Всех приветствую. Начинающий уровень. Не смог добиться (не смог найти решения в интернете) записи и чтения кириллицы из Делфи 7 в...

Sqlite3
Написать базу данных по аналогии с кодом во вложение. Тема-автомобили, кол-во параметров(колонок)-7. Не менее 15 автомобилей. В коде...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru