2015-02-07 4 views
0

У меня есть таблица:ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ только определенные значения?

DATE  WEATHERSTATION TEMPERATURE  RAINFALL 
1975-01-10   B81A    25    0 
1975-01-11   K174    33    16 
1975-01-12   ZG4N    18    3 

Я построить эту таблицу сначала обработки ввода, который содержит дату и температуру, а затем ввод, который содержит дату и осадки. Иногда имеются данные о дождевых осадках, которые отсутствуют в данных о температуре (например, если метеорологическая станция начала регистрировать осадки в 1950 году, но температуры в 1970 году - это происходит).

То, что я хотел бы сделать, это сказать:

  1. Если уже есть строка с этой датой, стоимость обновления X (который может быть температура или осадки в зависимости от программы);
  2. Если не ряд с этой датой, создайте его.

Очевидно, что я могу сделать это в самой программе, но я думаю, что делать это в SQL было бы более эффективным и разумным.

Если я использую INSERT OR REPLACE INTO weatherdata (date, weatherstation, temperature), потому что это удаляет значение осадков. Я бы хотел, чтобы INSERT OR UPDATE INTO WEATHERDATA, но это, кажется, не существует; У меня есть Googled и читайте сообщения StackOverflow об этом, но мне ничего не помогло.

Что было бы правильной вещью в этой ситуации?

(система базы данных SQLite, если это имеет значение.)

+0

возможно дубликат [INSERT IF NOT EXISTS ELSE UPDATE?] (Http://stackoverflow.com/questions/3634984/insert-if-not-exists -else-update) –

+0

Смотрите это: http://stackoverflow.com/questions/3634984/insert-if-not-exists-else-update. Используйте select, чтобы получить реальное значение столбца, который вы не хотите заменять. –

+0

Еще лучше, см. Это: http://stackoverflow.com/questions/418898/sqlite-upsert-not-insert-or-replace –

ответ

1

Делать это в SQL будет более эффективным, только если у вас есть база данных клиента/сервера и хотели, чтобы минимизировать нагрузку на сеть. Но SQLite - это встроенная база данных, это библиотека, которая связана с вашей программой; смешение SQL с логикой вашей программы ничего не потеряет.

Выполнение этого в SQL не было бы разумным (это possible, но чтение и удаление старой строки, а затем вставка новой строки менее эффективны).

Просто делать логику в программе:

db.execute("UPDATE ...") 
if db.affected_rows == 0: 
    db.execute("INSERT ...") 
Смежные вопросы