Избегание повторной записи с помощью SQLite и Python [duplicate]

Алгоритм, который использует std::sort, не указан. Используя функцию сравнения, которая не соответствует требованиям, установленным стандартом, вы нарушаете предположения алгоритма и вызывают неопределенное поведение.

Посмотрите, что происходит на выходе этой функции шумового сравнения, которая использует <= (который не является допустимым компаратором) вместо < (что действительно) .

http: //coliru.stacked -crooked.com/a/34e4cef3280f3728

На выходе я печатаю добавочную переменную (для ссылки, чтобы указать, когда алгоритм идет haywire) , затем значением первого аргумента и его положением в векторе, а затем вторым аргументом и его положением в векторе. Пример выглядит следующим образом:

124: 2@12 <= 4@7

Это означает, что это 124-й вызов функции сравнения, и он сравнивает значение 2 с индексом 12 со значением 4 с индексом 7.

Вещи сходят с ума, начиная с строки 37

37: 0@0 <= 0@-1
38: 0@0 <= 144@-2
39: 0@0 <= 0@-3
40: 0@0 <= 192@-4

. Это сравнение значений, которые я даже не вставлял в вектор (144, 192 и т. д.), а также в индексы вне диапазон вектора (отрицательные индексы, в данном случае).

3
задан Neeku 5 June 2014 в 16:02
поделиться

1 ответ

INSERT .... ON DUPLICATE не существует в SqLite. Но вы можете использовать INSERT OR REPLACE для достижения эффекта следующим образом.

INSERT 
    OR REPLACE
INTO
    text (id, text)  
VALUES
    (150574,
        (SELECT
           CASE 
              WHEN exists(SELECT 1  FROM text WHERE id=150574)
              THEN 'good' 
              ELSE 'Hello' 
           END
         )
    )

Ссылка: http://www.sqlite.org/lang_insert.html

8
ответ дан bansi 27 August 2018 в 17:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: