Форум пользователей MySQL
Доброго времени суток. У меня есть скрипт создающий 3 временные таблицы. Все работае корректно, НО если быстро нажимть f5 вылезает ошибка 1050 Table already exists. Есть ли какое-нибудь решение для этой проблемы?
#2 24.10.2012 14:49:18
vasya Архат Откуда: Орел Зарегистрирован: 07.03.2007 Сообщений: 5831
Re: 1050 Table already exists
Править скрипт — проверять наличие временной таблицы.
Страниц: 1
- Список
- » Программирование в MySQL
- » 1050 Table already exists
Форум пользователей MySQL
В качестве рабочего предположения — уже есть файлик на диске.
Например, создается табличка MyISAM — уже есть файлик MYD,
но нет файла frm. В результате в списке таблицы нет, но и создать
не удается. Если создается табличка InnoDB — она описана в прост-
ранстве имен InnoDB, но файлик frm удален. Тогда можно создать
файлик frm с нужной структурой, выполнить DROP TABLE (удалится
файлик и запись в пространстве InnoDB, и всё заработает.
Ошибка sqlite3 table sqlitedb_developers already exists
Ввиду того, что я новичок в sqlite, я не понимаю, что было сделано не так. Помогите мне разобраться в этом. Может я что-то не то скачал? P.S. код с сайта https://pythonru.com/biblioteki/vvedenie-v-sqlite-python. Учусь по нему.
Отслеживать
задан 3 авг 2022 в 9:44
427 4 4 серебряных знака 17 17 бронзовых знаков
CREATE TABLE IF NOT EXISTS sqlitedb_developers
3 авг 2022 в 9:47
Ну наверное вы уже запускали этот скрипт и таблица уже была создана. Второй раз ту же таблицу нельзя уже создать.
3 авг 2022 в 9:47
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
В sqlite нет типа datetime вместо него используется тип text. Соответственно нет и инструментов для работы с подобными данными. В связи с этим (на будущее) рекомендую использовать либо данные даты времени записанные в формат
ISO YYYY-mm-dd HH:MM:SS ( datetime.isoformat() в python) в виде типа text для sqlite
либо timestamp ( datetime.timestamp() в python) в виде real для sqlite
Ссылка на инфо
import sqlite3 # здесь не может возникнуть ошибки, # поскольку если этого файла нет, # обработчик его создаст conn = sqlite3.connect('sqlite_python.db') sqlite_create_table_query = """ CREATE TABLE -- добавление `if not exists` исключает -- попытку создания таблицы если она уже существует -- соответственно делая не нужным весь блок `try` if not exists developers ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, email text NOT NULL UNIQUE, -- вот про это место я писал выше, -- у Вас здесь тип datetime joining_date text, salary REAL NOT NULL ); """ conn.execute( sqlite_create_table_query ) conn.close()
SQLiteException: table already exists
My second table works fine. i tried to uninstall my app and install it and it wont work, maybe there is a limit of tables in DB? Here is my onCreate code:
@Override public void onCreate(SQLiteDatabase db) < db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_DATE + " TEXT, " + COLUMN_EXERCISE + " TEXT, " + COLUMN_WEIGHT + " TEXT, " + COLUMN_REPS + " TEXT, " + COLUMN_SET_TIME + " TEXT, " + COLUMN_WORKOUT_TIME + " TEXT, " + COLUMN_DISTANCE + " TEXT, " + COLUMN_SPEED + " TEXT, " + COLUMN_REST_TIME + " TEXT, " + COLUMN_NUMBER_OF_SETS + " TEXT, " + COLUMN_FIELDS_PARAMETER + " TEXT, " + COLUMN_NOT_ON_LIST_EXERCISE + " TEXT, " + COLUMN_HERAT_BEAT + " TEXT, " + COLUMN_CALORIES + " TEXT, " + COLUMN_COMMENT + " TEXT);"); db.execSQL("CREATE TABLE " + SECOND_TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_AGE + " TEXT, " + COLUMN_AGE_PW + " TEXT, " + COLUMN_GENDER + " TEXT, " + COLUMN_HEIGHT + " TEXT, " + COLUMN_HEIGHT_PW + " TEXT, " + COLUMN_BODY_WEIGHT + " TEXT, " + COLUMN_BODY_WEIGHT_PW + " TEXT, " + COLUMN_PROFILE_PIC + " TEXT, " + COLUMN_FAT + " TEXT, " + COLUMN_FAT_PW + " TEXT);"); db.execSQL("CREATE TABLE " + MEDIA_TABLE + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_PICS + " TEXT, " + COLUMN_VIDEO + " TEXT);"); >@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) < db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + SECOND_TABLE_NAME); db.execSQL("DROP TABLE IF EXISTS " + MEDIA_TABLE); onCreate(db); >EDIT : @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
11.3k 2 2 gold badges 39 39 silver badges 48 48 bronze badges
asked May 15, 2013 at 18:02
389 2 2 gold badges 7 7 silver badges 16 16 bronze badges
3 Answers 3
You should use CREATE TABLE IF NOT EXISTS instead of CREATE TABLE . Your code would then look like this:
@Override public void onCreate(SQLiteDatabase db) < db.execSQL("CREATE TABLE IF NOT EXISTS" + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_DATE + " TEXT, " + COLUMN_EXERCISE + " TEXT, " + COLUMN_WEIGHT + " TEXT, " + COLUMN_REPS + " TEXT, " + COLUMN_SET_TIME + " TEXT, " + COLUMN_WORKOUT_TIME + " TEXT, " + COLUMN_DISTANCE + " TEXT, " + COLUMN_SPEED + " TEXT, " + COLUMN_REST_TIME + " TEXT, " + COLUMN_NUMBER_OF_SETS + " TEXT, " + COLUMN_FIELDS_PARAMETER + " TEXT, " + COLUMN_NOT_ON_LIST_EXERCISE + " TEXT, " + COLUMN_HERAT_BEAT + " TEXT, " + COLUMN_CALORIES + " TEXT, " + COLUMN_COMMENT + " TEXT);"); db.execSQL("CREATE TABLE IF NOT EXISTS" + SECOND_TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_AGE + " TEXT, " + COLUMN_AGE_PW + " TEXT, " + COLUMN_GENDER + " TEXT, " + COLUMN_HEIGHT + " TEXT, " + COLUMN_HEIGHT_PW + " TEXT, " + COLUMN_BODY_WEIGHT + " TEXT, " + COLUMN_BODY_WEIGHT_PW + " TEXT, " + COLUMN_PROFILE_PIC + " TEXT, " + COLUMN_FAT + " TEXT, " + COLUMN_FAT_PW + " TEXT);"); db.execSQL("CREATE TABLE IF NOT EXISTS" + MEDIA_TABLE + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_PICS + " TEXT, " + COLUMN_VIDEO + " TEXT);"); >@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)