Как удалить строку в SQLite, чтобы не удалить «индекс»
При определенных условиях нужно удалять строки с данными о пользователях, соответственно вместе с ними будет удаляться id с «порядковым номером» пользователя, то есть на старте есть таблица:
1 мужской 20 темный 2 женский 15 светлый 3 женский 30 рыжий
После удаления второй строки остается:
1 мужской 20 темный 3 женский 30 рыжий
Можно ли как-то сделать, чтобы осталось:
1 мужской 20 темный 2 женский 30 рыжий
Нужно это для того, что внутри программы запускается цикл по id и выполняются определенные операции, соответственно, если ставлю цикл
for i in range(len(количество строк))
То количество строк остается 2, но присутствует 3, не могу c данными работать по i А если сначала получить данные, например, в переменную string о всех строках, а потом их обрабатывать, то:
for i in sting
Не могу обращаться по id к строкам, а мне это нужно в моей задаче Сама задача: Есть написанный Telegram-бот, который подбирает кастинги по заданным характеристикам для моделей. Есть таблица с характеристиками моделей, которая заполняется по мере работы пользователя с ботом, есть таблица с кастингами, которую заполняют менеджеры также через бота Таблицы идентичны по виду, так как заполнение происходит по кнопкам, то есть таблица кастингов выглядит:
id (номер кастинга) casting gender age и тд (данные, которые указаны в кастинге)
В отдельных строках они, потому что по ним идет сравнение с характеристиками моделей. Каждые два дня старые кастинги должны удаляться, что и приводит к сдвигу по id (для меня проще называть «порядковому номеру кастинга»), но когда пользователь нажимает кнопку «Найти кастинг», должен сработать цикл, бегущий по всем кастингам, а по id кастинга, который равен счетчику цикла, происходит работа с данными (сверяются на соответствие с данными пользователя) Бот функционировал ранее без проблем, сейчас просто происходит его улучшение и расширение, в связи с чем столкнулась с необходимостью работать по id, а не по тексту кастинга, как ранее Не знаю, понятно ли смогла задать вопрос, буду рада помощи! Заранее спасибо!
Как удалить строку в sqlite
Команда DELETE удаляет данные из БД. Она имеет следующий формальный синтаксис:
DELETE FROM имя_таблицы [WHERE условие_удаления]
Например, возьмем следующую таблицу products, которая хранит некоторый набор товаров:
CREATE TABLE products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, company TEXT NOT NULL, product_count INTEGER DEFAULT 0, price INTEGER ); INSERT INTO products (name, company, product_count, price) VALUES ('iPhone 13', 'Apple', 3, 76000), ('iPhone 12', 'Apple', 2, 51000), ('Galaxy S21', 'Samsung', 2, 56000), ('Galaxy S20', 'Samsung', 1, 41000), ('P40 Pro', 'Huawei', 5, 36000);
Удалим из этой таблицы товары, у которых производитель — Huawei:
DELETE FROM products WHERE company='Huawei';
Или удалим все товары, производителем которых является Apple и которые имеют цену меньше 60000:
DELETE FROM products WHERE company='Apple' AND price < 60000;
Если необходимо вовсе удалить все строки вне зависимости от условия, то условие можно не указывать:
DELETE FROM products;
Урок 35. Добавление и удаление строк в базе данных SQLite в Android
На этом уроке рассмотрим , как обновлять и удалять строки в базе данных SQLite методами update и delete. Исходный код примера под видео:
package . import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper < public static final int DATABASE_VERSION = 1; public static final String DATABASE_NAME = "contactDb"; public static final String TABLE_CONTACTS = "contacts"; public static final String KEY_ID = "_id"; public static final String KEY_NAME = "name"; public static final String KEY_MAIL = "mail"; public DBHelper(Context context) < super(context, DATABASE_NAME, null, DATABASE_VERSION); >@Override public void onCreate(SQLiteDatabase db) < db.execSQL("create table " + TABLE_CONTACTS + "(" + KEY_ID + " integer primary key," + KEY_NAME + " text," + KEY_MAIL + " text" + ")"); >@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) < db.execSQL("drop table if exists " + TABLE_CONTACTS); onCreate(db); >>
Вам також може сподобатися
Уроки по android разработке на Java 0 1 900
Добро пожаловать в Now in Android, ваше текущее руководство по новинкам и важным событиям
Архитектура андроид-приложений 0 10 231
Продолжая серию уроков о разработке мобильных приложений, мы будем изучать компонент Navigation набора инструментов
Документация по android 2 31 005
Перевод статьи на Медиуме о технологии Broadcast Receivers (широковещательные приемники). Это компоненты андроид, которые
Как удалить несколько строчек данных SQLite в Python?
И так, мне нужно удалить одну строчку данных в sqlite таблице, но как это сделать, не могу сообразить. И так в таблице имеются следующие данные
Мне нужно удалить эту строку
В интернете везде пример удаления следующие
Но это команда удалит все строчки, где присутствует Finance в столбце department_name. Но мне нужно сделать так:
id = 674759776
Если id_1 == с моим id
То удалить строчку данных где присутствует мой id. То есть следующую строчку
Как это можно сделать?
- Вопрос задан более двух лет назад
- 364 просмотра
1 комментарий
Простой 1 комментарий
soremix @SoreMix Куратор тега Python
Заменить Finance на нужный ID, а department_name на id_1?
Решения вопроса 1
Kir Mozor @150_Kirill_150 Автор вопроса
FX, Python, C# (Unity), Coding, адепт Linux
Короче проблемку решил следующим образом:
import sqlite3 conn = sqlite3.connect("local.db", check_same_thread = False) # или :memory: чтобы сохранить в RAM cursor = conn.cursor() my_id = 74654758345 cursor.execute('SELECT id_2 FROM stol_game WHERE id_1 = ?', (my_id, )) id_2_turtle = cursor.fetchone() id_2 = int(id_2_turtle[0]) cursor.execute('SELECT brosokone2 FROM stol_game WHERE id_1 = ?', (my_id, )) brosokone2turtle = cursor.fetchone() brosokone2 = int(brosokone2turtle[0]) cursor.execute('SELECT brosoktwo2 FROM stol_game WHERE id_1 = ?', (my_id, )) brosoktwo2turtle = cursor.fetchone() brosoktwo2 = int(brosoktwo2turtle[0]) cursor.execute('SELECT vsumme2 FROM stol_game WHERE id_1 = ?', (my_id, )) vsumme2turtle = cursor.fetchone() vsumme2 = int(vsumme2turtle[0]) cursor.execute('SELECT stavka2 FROM stol_game WHERE id_1 = ?', (my_id, )) stavka2turtle = cursor.fetchone() stavka2 = int(stavka2turtle[0]) cursor.execute('SELECT frend_id FROM stol_game WHERE id_1 = ?', (my_id, )) frend_id2turtle = cursor.fetchone() frend_id = int(frend_id2turtle[0]) cursor.execute('SELECT brosokone1 FROM stol_game WHERE id_1 = ?', (my_id, )) brosokone1turtle = cursor.fetchone() brosokone1 = int(brosokone1turtle[0]) cursor.execute('SELECT brosoktwo1 FROM stol_game WHERE id_1 = ?', (my_id, )) brosoktwo1turtle = cursor.fetchone() brosoktwo1 = int(brosoktwo1turtle[0]) cursor.execute('SELECT vsumme1 FROM stol_game WHERE id_1 = ?', (my_id, )) vsumme1turtle = cursor.fetchone() vsumme1 = int(vsumme1turtle[0]) cursor.execute('SELECT stavka1 FROM stol_game WHERE id_1 = ?', (my_id, )) stavka1turtle = cursor.fetchone() stavka1 = int(stavka1turtle[0]) cursor.execute('SELECT win FROM stol_game WHERE id_1 = ?', (my_id, )) win2turtle = cursor.fetchone() win = int(win2turtle[0]) cursor.execute('DELETE FROM stol_game WHERE id_1 = ? AND frend_id = ? AND brosokone1 = ? AND brosoktwo1 = ? AND vsumme1 = ? AND stavka1 = ? AND id_2 = ? AND brosokone2 = ? AND brosoktwo2 = ? AND vsumme2 = ? AND stavka2 = ? AND win = ?', (my_id, frend_id, brosokone1, brosoktwo1, vsumme1, stavka1, id_2, brosokone2, brosoktwo2, vsumme2, stavka2, win, )) conn.commit()
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ответы на вопрос 2
plyshk1n2k @plyshk1n2k
Не пробовал добавить еще одно условие в запрос к бд?
У строк же разные id_1 и id_2
Или же можно использовать TOP, LIMIT, ROWNUM
Если ты уверен, что в бд на первой строке именно то что тебе нужно и тебе следует ее удалить, тогда смело используй то что я описал строчкой выше
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Но это команда удалит все строчки, где присутствует Finance в столбце department_name.
Ну так в чём проблема-то ? нужно, чтобы присутствовало нужное число в нужном столбце
DELETE FROM departments
WHERE id_1=674759776
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Python
- +3 ещё
Почему aiogram выводит пустой объект?
- 1 подписчик
- 13 минут назад
- 11 просмотров