| 160 | Como Django decide entre UPDATE vs. INSERT |
| 161 | ---------------------------------------------------- |
| 162 | |
| 163 | Você deve ter notado que os objetos de banco de dados do Django utiliza o mesmo método ``save()`` para criar e alterar objetos. Django abstrai a necessidade de utilizar declarações SQL de ``INSERT`` ou ``UPDATE``. Especificamente, quando você chama ``save()``, Django segue este algorítimo: |
| 164 | |
| 165 | * Caso o atributo chave-primária (primary-key) do objeto receba um valor que não resulte em ``False`` (assim como ``None`` ou strings vazias), Django executa uma query ``SELECT`` para determinar se já existe um registro com a chave-primária fornecida. |
| 166 | * Caso já exista um registro com a chave-primária forncida, Django executa uma query de ``UPDATE``. |
| 167 | * Se o atributo do chave-primária (primary-key) do objeto *não* recebeu valor algum, ou recebeu um valor que não tenha registro, Django executa um ``INSERT``. |
| 168 | |
| 169 | A grande sacada aqui é que você deve ter cuidado para não especificar explicitamente um valor de chave-primária (primary-key) ao salvar novos objetos quando você não puder garantir que o valor da chave-primária (primary-key) não esteja sendo utilizado. Para mais sobre estes aspectos, ver "Especificando explicitamente valores auto-primary-key" , acima. |
| 170 | |