#python #sql #mariadb
Вопрос:
Я преодолел проблему при внедрении базы данных в свой проект на Python.
Я создаю новую таблицу со следующим кодом:
mycursor = mydb.cursor()
sql = f"CREATE TABLE IF NOT EXISTS _{self.client_id} (tour_date DATE, tour_distance INT, tour_duration INT, tour_elevation_up INT, tour_elevation_down INT, tour_map_image TEXT, tour_name TEXT, tour_sport TEXT, tour_start_point TEXT, tour_type TEXT)"
mycursor.execute(sql)
mydb.commit()
Я перебираю свои данные и хочу вставить их в таблицу. Но я не хочу, чтобы, если запись уже существует в таблице, она снова добавляла те же данные.
Это мой код, который я в настоящее время должен вставить в свою таблицу:
mycursor = mydb.cursor()
sql = f"INSERT INTO _{self.client_id} (tour_date, tour_distance, tour_duration, tour_elevation_up, tour_elevation_down, tour_map_image, tour_name, tour_sport, tour_start_point, tour_type) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) "
val = (TourDate, TourDistance, TourDuration, TourElevation_up, TourElevation_down, TourMap_image, TourName, TourSport, TourStart_point, TourType)
mycursor.execute(sql, val)
mydb.commit()
Поэтому мой вопрос в том, как я могу проверить, существует ли запись уже в таблице, а затем избежать создания дубликата?
Комментарии:
1. Какой тип SQL используется? SQLite?
2. Какое уникальное поле в таблице? (имя тура? tour_date?)
3. Я использую MariaDB (если это то, что вы хотите знать). Имя тура уникально
4. Ознакомьтесь с документацией: mariadb.com/kb/en/create-table/#unique-key-column-option
5. Это сработало для меня 😀
Ответ №1:
вы можете «выбрать count() из вашего имя_таблицы, где client_id=’current_id’, если count() возвращает значение int, большее 0, вы не должны вставлять его в базу данных.
Комментарии:
1. Но я хочу проверить, совпадает ли запись в существующей таблице, а не существует ли таблица. У меня есть для каждого пользователя новая таблица, и я считаю, что таблицы-это данные.
Ответ №2:
- Во — первых-избегайте использования
TEXT
без необходимости - Второе — создайте таблицу с необходимыми индексами:
CREATE TABLE IF NOT EXISTS _{self.client_id} (
tour_date DATE,
tour_distance INT,
tour_duration INT,
tour_elevation_up INT,
tour_elevation_down INT,
tour_map_image TEXT,
tour_name VARCHAR(64) PRIMARY KEY,
tour_sport VARCHAR(64),
tour_start_point VARCHAR(64),
tour_type VARCHAR(64)
);
INSERT IGNORE ...
Оператор третьего использования для предотвращения дублирования