Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQLdb python insere linha ou contagem de incremento na coluna, se existir


Aqui está uma abordagem usando o link que @johnthexii forneceu (demo ) (está usando apenas o MySQL, portanto não é específico do Python)
CREATE TABLE UserNames (`username` varchar(35) unique, `duplicates` int);

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('stackoverflow.com', 0);

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('dba.stackexchange.com/', 0)
 ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1;

INSERT INTO UserNames (`username`, `duplicates`)
 VALUES ('stackoverflow.com', 0)
 ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1;

Aqui está um detalhamento do que está acontecendo:O username O campo é marcado como exclusivo, portanto, qualquer tentativa de inserir um registro com um nome de usuário existente falhará no nível do banco de dados. Em seguida, o INSERT declaração tem um extra
ON DUPLICATE KEY UPDATE `duplicates` = `duplicates`+1

Isso diz ao MySQL que, em vez de falhar no INSERT, apenas pegue as duplicates coluna e incrementar em um. Ao executar os três comandos INSERT, você verá dois registros, stackoverflow.com tem um duplicates valor de 1, enquanto dba.stackexchange.com tem um duplicates valor de 0.