Как удалить таблицу в sql python
На этом шаге мы рассмотрим выполнение указанных операций .
Удалить таблицу позволяет инструкция DROP TABLE . Удалить можно как обычную, так и временную таблицу. Все индексы, связанные с таблицей, также удаляются. Формат инструкции:
DROP TABLE [IF EXISTS] [Название базы данных>.]Название таблицы>;
Поскольку SQLite напрямую работает с файлом, не существует инструкции для удаления базы данных. Чтобы удалить базу, достаточно просто удалить файл.
В предыдущих шагах мы рассмотрели лишь основные возможности SQLite . Остались не рассмотренными триггеры, представления, виртуальные таблицы, внешние ключи, операторы, встроенные функции и некоторые другие возможности. За подробной информацией обращайтесь к документации по SQLite .
Примечание . Для интерактивной работы с базами данных SQLite удобно пользоваться бесплатной программой Sqliteman . Ее можно загрузить по интернет-адресу http://sourceforge.net/projects/sqliteman/ или взять здесь.
Со следующего шага мы начнем рассматривать доступ к базе данных SQLite из Python .
Как удалить таблицу SQlite?
Данные в БД берутся из JSON(которые меняется постоянно) c сервера. Т.е. БД всегда имеет новую версию при входе в приложение.
15 дек 2015 в 9:50
т.е условие лишнее?
15 дек 2015 в 10:02
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Уверены ли вы в том, что эта строчка выполняется?
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACT);
После выполнения этого запроса таблица должна дропнуться. После у вас выполняется код:
onCreate(db);
из которого выполняется
database.execSQL(DATABASE_CREATE);
а значит таблица создаётся снова
в метод onUpgrade вы попадаете в случае если версия дб изменилась т.е. DATABASE_VERSION а условие
if (newVersion > oldVersion)
Необходимо для уточнения версии (если вы например будете поддерживать приложение в котором будут часто меняться версии бд и информацию из них необходимо будет сохранять.
Попробуйте продебажить и поставьте бреакпоинт на строчке
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACT);
Должно получится так — если изменить при том коде который вы предоставили DATABASE_VERSION на 3, то после включения приложения вы получите autowash.db с пустой таблицей autowash.
Определение структуры данных в SQLite
Создание и удаление таблицы. Прикрепление базы данных
Последнее обновление: 26.11.2021
Для создания таблиц используется команда CREATE TABLE . Общий формальный синтаксис команды CREATE TABLE :
CREATE TABLE название_таблицы (название_столбца1 тип_данных атрибуты_столбца1, название_столбца2 тип_данных атрибуты_столбца2, . название_столбцаN тип_данных атрибуты_столбцаN, атрибуты_уровня_таблицы )
После команды CREATE TABLE указывается название таблицы. Имя таблицы выполняет роль ее идентификатора в базе данных, поэтому оно должно быть уникальным. Кроме того, оно не должно начинаться на «sqlite_», поскольку названия таблиц, которые начинаются на «sqlite_», зарезервированы для внутреннего пользования.
Затем после названия таблицы в скобках перечисляются названия столбцов, их типы данных и атрибуты. В самом конце можно определить атрибуты для всей таблицы. Атрибуты столбцов, а также атрибуты таблицы указывать необязательно.
Создадим простейшую таблицу. Перед выполнением команды CREATE TABLE вне зависимости, что мы используем — консольный клиент sqlite3, графический клиент DB Browser for SQLite или какой-то другой клиент, вначале откроем базу данных, где мы хотим создать таблицу.
Для создания таблицы выполним следующий скрипт:
CREATE TABLE Users ( Id INTEGER, Name TEXT, Age INTEGER );
В данном случае таблица называется «Users». В ней определено три столбца: Id, Age, Name. Первые два столбца представляют идентификатор пользователя и его возраст и имеют тип INTEGER , то есть будут хранить числовые значения. Столбец «Name» представляет имя пользователя и имеет тип TEXT , то есть представляет строку. В данном случае для каждого столбца определены имя и тип данных, при этом атрибуты столбцов и таблицы в целом отсутствуют.
И в результате выполнения этой команды будет создана таблица Users с тремя столбцами.
Создание таблицы при ее отсутствии
Если мы повторно выполним выше определенную sql-команду для создания таблицы Users, то мы столкнемся с ошибкой — ведь мы уже создали таблицу с таким названием. Но могут быть ситуации, когда мы можем точно не знать или быть не уверены, есть ли в базе данных такая таблица (например, когда мы пишем приложение на каком-нибудь языке программирования и используем базу данных, которая не нами создана). И чтобы избежать ошибки, с помощью выражения IF NOT EXISTS мы можем задать создание таблицы, если она не существует:
CREATE TABLE IF NOT EXISTS Users ( Id INTEGER, Name TEXT, Age INTEGER );
Если таблицы Users нет, она будет создана. Если она есть, то никаких действий не будет производиться, и ошибки не возникнет.
Прикрепление базы данных
Также мы можем прикрепить базу данных и затем в ней уже создать базу данных.
Для прикрепления базы данных применяется команда ATTACH DATABASE :
ATTACH DATABASE 'C:\sqlite\test.db' AS test;
После команды ATTACH DATABASE указывается путь к файлу базы данных (в данном случае это путь «C:\sqlite\test.db»). Затем после оператора AS идет псевдоним, на который будет проецироваться база данных. То есть в коде для обращения к базе данных «C:\sqlite\test.db» будет применяться имя «test». При обращении к таблице из этой базы данных, сначала указывается псевдоним базы данных и через точку название таблицы:
псевдоним_бд.таблица
Например, создадим таблицу в прикрепленной базе данных:
ATTACH DATABASE 'C:\sqlite\test.db' AS test; CREATE TABLE test.users ( id INTEGER, name TEXT, age INTEGER );
Для создания таблицы users в бд test.db название таблицы предваряется псевдонимом: test.users .

И после открытия базы данных test.db в ней можно будеть увидеть таблицу users.
Удаление таблиц
Для удаления таблицы применяется команда DROP TABLE , после которой указывается название удаляемой таблицы. Например, удалим таблицу users:
DROP TABLE users;
По аналогии с созданием таблицы, если мы попытаемся удалить таблицу, которая не существует, то мы столкнемся с ошибкой. В этом случае опять же с помощью операторов IF EXISTS проверять наличие таблицы перед удалением:
DROP TABLE IF EXISTS users;
Подключение к БД, создание и удаление таблиц
Для добавления возможности использования СУБД SQLite в программе на Python необходимо импортировать модуль:
import sqlite3
После чего станут доступны API-функции этого расширения. Подробнее о них мы будем говорить на последующих занятиях. А вначале воспользуемся вот такой простой заготовкой для создания и управления БД:
import sqlite3 as sq con = sq.connect("saper.db") cur = con.cursor() cur.execute(""" """) con.close()
Смотрите, в первую очередь мы должны вызвать метод connect, чтобы установить связь с определенной БД. В данном случае – это файл saper.db, который должен располагаться в том же каталоге, что и файл программы на Питоне. В качестве расширений этого файла, обычно, используют следующие:
*.db, *.db3, *.sqlite и *.sqlite3
Я взял первый вариант, т.к. он короткий и понятный. При выполнении команды connect файл saper.db либо будет открыт, либо будет создан, если он не существует. В результате создается (или открывается) БД с именем saper.db.
При успешном соединении с БД метод connect возвращает экземпляр объекта Connection, на который ссылается переменная con. И, далее, мы должны использовать объект Cursor для взаимодействия с БД и выполнения SQL-запросов. Например, это можно сделать с помощью метода execute, которому в качестве аргумента как раз и передается строка с SQL-запросом. Но мы пока там ничего указывать не будем. В конце программы при завершении работы с БД необходимо закрыть соединение. Это делается с помощью метода close.
Вот так в двух словах происходит взаимодействие с СУБД SQLite. Запустим программу, видим, что никаких ошибок не возникло и, кроме того, была создана БД saper.db в виде отдельного файла в каталоге с исполняемым файлом Питона.
Однако, соединяться с БД лучше все-таки через менеджер контекста:
with sq.connect("saper.db") as con: cur = con.cursor() cur.execute(""" """)
Он автоматически сохраняет данные в БД (вызывает метод commit()) даже при возникновении ошибочных ситуаций. Поэтому, в дальнейшем мы им и будем пользоваться. Конечно, после него, когда соединение с БД уже не нужно, его нужно закрыть все той же командой close().
Давайте теперь перейдем в программу DB Browser и откроем эту БД. На экране увидим вот такое окно и, как видите, у нас пока здесь нет ни одной таблицы.

Создание и удаление таблиц
- name – строка с именем игрока;
- sex – число, пол игрока (1 – мужской; 2 – женский);
- old – число, возраст игрока;
- score – суммарное число набранных очков за все игры.
- NULL – значение NULL;
- INTEGER – целочисленный тип (занимает от 1 до 8 байт);
- REAL – вещественный тип (8 байт в формате IEEE);
- TEXT – строковый тип (в кодировке данных базы, обычно UTF-8);
- BLOB (двоичные данные, хранятся «как есть», например, для небольших изображений).
cur.execute("""CREATE TABLE users ( name TEXT, sex INTEGER, old INTEGER, score INTEGER )""")
Мы здесь указываем команду CREATE TABLE (создать таблицу), затем, имя таблицы – users и, далее, в круглых скобках через запятую перечисляем поля с указанием их типов. Названия команд и типов принято писать заглавными буквами, а имена таблиц и их полей – строчными. Мы будем придерживаться этого негласного правила. Запустим программу, снова откроем БД в DB Browser и увидим созданную таблицу заданной структуры. Это будет наше первое хранилище данных. Однако, смотрите, если запустить программу еще раз, то появится ошибка, т.к. мы пытаемся создать таблицу, которая уже существует. Поэтому SQL-запрос лучше записать в таком виде:
cur.execute("""CREATE TABLE IF NOT EXISTS users ( name TEXT, sex INTEGER, old INTEGER, score INTEGER )""")
То есть, создавать таблицу только если она не существует. Теперь, запуская программу, никаких ошибок появляться не будет и, кроме того, мы точно будем уверены, что таблица users присутствует в нашей БД. Давайте в программе DB Browser добавим несколько записей. Для этого нужно нажать на кнопку «Добавить запись» и ввести значения: Алексей 1 22 1000
Миша 1 19 800
Федор 1 26 1100
Маша 2 18 1500 После этого обязательно нажать на кнопку «Записать изменения» и данные будут сохранены в БД. Затем, в этой же программе на вкладке «SQL», мы можем прописывать SQL-запросы и выполнять их. В качестве примера выполним очень распространенную команду SELECT для выбора записей из таблицы users. В самом простом варианте это можно сделать так:
SELECT * FROM users
Здесь * указывает взять все поля из таблицы users. Подробнее мы еще поговорим об этом запросе, а пока я покажу следующее. Каждая таблица SQLite содержит скрытое поле rowid, хранящее уникальный идентификатор записи. Выведем его на экран с помощью запроса:
SELECT rowid, * FROM users
Теперь мы видим значения этого поля для каждой записи. Используя rowid, в частности, можно осуществлять связывание нескольких таблиц между собой для формирования сводного отчета. И в дальнейшем мы увидим как это делается. Наконец, если требуется удалить таблицу, то для этого прописывается такой SQL-запрос:
cur.execute("DROP TABLE users")
Как видите, все довольно просто.
PRIMARY KEY, AUTOINCREMENT, NOT NULL и DEFAULT
При необходимости можно самостоятельно создать поле подобное rowid в любой таблице. Для этого, при создании ее структуры, указывается следующая строчка: user_id INTEGER PRIMARY KEY AUTOINCREMENT Здесь ограничитель PRIMARY KEY (первичный ключ) означает, что поле user_id должно содержать уникальные значения, а ограничитель AUTOINCREMENT указывает СУБД автоматически увеличивать значение user_id при добавлении новой записи. Удалим таблицу users из БД, выполним программу и увидим, что автоматически создается еще одна вспомогательная таблица sqlite_sequence, которая будет хранить служебную информацию для поля user_id. Но, в нашей работе она не нужна, мы по-прежнему пользуемся только одной таблицей users. Далее, если нам нужно указать, что поле обязательно должно содержать какие-либо данные, то ему следует добавить ограничитель NOT NULL, а для задания значения по умолчанию – ограничитель DEFAULT, например, так:
cur.execute("""CREATE TABLE IF NOT EXISTS users ( name TEXT NOT NULL, sex INTEGER DEFAULT 1, old INTEGER, score INTEGER )""")
Теперь, при добавлении новой записи, обязательно нужно будет указывать имя игрока, но можно не указывать его пол, если предполагается мужской:
INSERT INTO users (name, old, score) VALUES('Алексей', 18, 1000)
В результате получим запись: Алексей 1 18 1000 Часто ограничители NOT NULL и DEFAULT объединяют между собой и пишут так:
sex INTEGER NOT NULL DEFAULT 1,
Тогда у нас поле sex обязательно будет содержать значение и по умолчанию оно будет равно 1. Вот так происходит обращение к БД и создание таблиц в SQLite. На следующем занятии мы продолжим изучение команд языка SQL.
