Как предотвратить закачку дубликата в БД после проверки данных?
Я осуществляю проверку данных с помощью написания запроса к БД MS SQL через Python:
params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};SERVER=сервер;DATABASE=БД;UID=логин;PWD=пароль")
qry = """SELECT * FROM [таблица] WHERE [столбец] = ?"""
params = [pd.to_datetime("2020-07-20")]
df = pd.read_sql(qry, conn, params=params)
Здесь если я вижу, что данные возвращаются, то они уже есть в БД, а если нет, то продолжаю закачку.
Сейчас делаю полное веб приложение с графическим интерфейсом для коллег не IT. Надо чтобы программа сама смотрела, если что-то выходит, то выводить предупреждение, что данные уже есть и возвращатся на первоначальную стадию закачки.
Как осуществить в коде данное условие?
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Если вопрос в том как проверить пустой ли датафрейм:
if df.empty:
...
или
if len(df) == 0:
...
Автор решения: MaxU
→ Ссылка
Ответ на дополнения из комментариев.
Для того, чтобы проверить есть ли в файле даты, которые уже существуют в таблице БД можно сделать так:
- вычитать все уникальные даты из таблицы БД
- вычитать все дату/время из CSV файла, отрезать время, превратив значения в дату
- найти пересечение этих двух множеств - если пересечение множеств непустое, значит хотя бы одна дата из CSV файла уже существует в таблице БД.
Код:
qry = """SELECT DISTINCT date_column_name as dt FROM table_name"""
db_dates = pd.read_sql(qry, conn)
csv_dates = pd.to_datetime(df["date"], errors="coerce").dt.floor("D").unique()
intersctn = set(db_dates["dt"]) & set(csv_dates)
if intersctn:
# пересечение непустое
...
else:
# пересечение пустое
...