Dans SQLite, étant donné ce schéma de base de donnéesincrémente le compteur ou Insérer une ligne dans une instruction, dans SQLite
CREATE TABLE observations (
src TEXT,
dest TEXT,
verb TEXT,
occurrences INTEGER
);
CREATE UNIQUE INDEX observations_index
ON observations (src, dest, verb);
chaque fois qu'une nouvelle observation tuple (:src, :dest, :verb)
arrive, je veux soit incrémenter la colonne « occurrences » pour l'existant ligne pour ce tuple, ou ajoutez une nouvelle ligne avec occurrences = 1 s'il n'y en a pas déjà une. Dans le pseudocode concret:
if (SELECT COUNT(*) FROM observations
WHERE src == :src AND dest == :dest AND verb == :verb) == 1:
UPDATE observations SET occurrences = occurrences + 1
WHERE src == :src AND dest == :dest AND verb == :verb
else:
INSERT INTO observations VALUES (:src, :dest, :verb, 1)
Je me demande s'il est possible de faire toute cette opération dans une instruction SQLite. Cela simplifierait la logique de l'application (qui doit être entièrement asynchrone par rapport aux opérations de la base de données) et éviterait également une double recherche d'index avec exactement la même clé. INSERT OR REPLACE ne semble pas être ce que je veux, et hélas, il n'y a pas UPDATE OU INSERT.
Ne serait-il pas plus logique de déclarer 'occurrences' comme INTEGER? – dan04
D'oh! Je voulais. Édité. – zwol