insert & update ¶
SQL๋ฌธ์์๋ insert into values ๊ตฌ๋ฌธ์ ์ด์ฉํด ๋ ์ฝ๋๋ฅผ ์ฝ์
ํ๊ณ , update set where ๊ตฌ๋ฌธ์ ์ด์ฉํด ๋ ์ฝ๋๋ฅผ ์์ ํ๋ค. ํ์ง๋ง django๋ ์ด ๋์ ํ๋๋ก ๋ณด๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ์ฝ๋๋ฅผ ์ฝ์
ํ๊ณ ๊ฐฑ์ ํ๋ ์์
์, ๋ชจ๋ธ๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅ(save)ํ๋ ๊ฒ์ผ๋ก ์ถ์ํํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ธํด๋์ค๋ save๋ฉ์๋๋ฅผ ๊ฐ์ง๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ๋ชจ๋ธ๋ save๋ฉ์๋๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋ค. ์๋ ์์์ ๋ณด๋ฏ์ด save ๋ฉ์๋๋ ์๋ก๋ง๋ ๋ ์ฝ๋ ํ๋์ ์์ฑ์ ๋ฐ๋ผ์ ์ ๋นํ ์ฝ์
๊ณผ ๊ฐฑ์ ์์
์ ์ํํ๋ค.

save๋ฉ์๋๋ ์ฐ์ ํ์ฌ ์ ์ฅํ๋ ค๋ ๋ ์ฝ๋์ ์ฃผํค๋ฅผ ๊ฐ์ง๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฒ์ํ์ฌ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ ์ง ๊ฐฑ์ ํ ์ง ๊ฒฐ์ ํ๋ค. ์ฃผํค๋ฅผ ์ด์ฉํด ๊ธฐ์กด์ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ์๋ ๋จ์ํ ๊ฐฑ์ ํ๋ค. ์ฃผํค๋ฅผ ์ด์ฉํด ๋ ์ฝ๋๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ ๋จ์ํ ์ฝ์ ํ๋ค. ๋ง์ผ ์ฃผํค๊ฐ ์๋๋ฐ ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ฝ์ ํ์ฌ๋ ์๊ด์ด ์์ผ๋ฏ๋ก ์ฝ์ ํ๋ค. ๋ค์์ save๋ฉ์๋์ ์ฃผ์ ๋ถ๊ธฐ์ ์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
class Employee(models.Model): name= models.CharField(maxlength=100) email= models.EmailField()Employee ๋ชจ๋ธ์ ํด๋นํ๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ save๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ก์ด ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ๊ฑฐ๋, ๊ธฐ์กด์ ๋ ์ฝ๋๋ฅผ ๊ฐฑ์ ํ๋ค. ๊ธฐ์กด์ ์ฝ์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ฒ์ save๋ฅผ ํธ์ถํ๋ฉด ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ๊ณ , ๋ค์ ๋ฒ save๋ฅผ ํธ์ถํ๋ฉด ๋ ์ฝ๋๋ฅผ ๊ฐฑ์ ํ๋ค. ๋ ์ฝ๋๋ ๊ฐ์ฒด๋ก, ๋ ์ฝ๋์ ์์ฑ์ ๊ฐ์ฒด์ ๋ฉค๋ฒ ๋ณ์๋ก ์ทจ๊ธํ๋ค.
e= Employee(name='John', email='John@django.com') e.save() # insert e.name= 'jack' e.save() # update

save๋ฉ์๋๋ ์ฐ์ ํ์ฌ ์ ์ฅํ๋ ค๋ ๋ ์ฝ๋์ ์ฃผํค๋ฅผ ๊ฐ์ง๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฒ์ํ์ฌ ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ ์ง ๊ฐฑ์ ํ ์ง ๊ฒฐ์ ํ๋ค. ์ฃผํค๋ฅผ ์ด์ฉํด ๊ธฐ์กด์ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๊ฒฝ์ฐ์๋ ๋จ์ํ ๊ฐฑ์ ํ๋ค. ์ฃผํค๋ฅผ ์ด์ฉํด ๋ ์ฝ๋๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒฝ์ฐ์๋ ๋จ์ํ ์ฝ์ ํ๋ค. ๋ง์ผ ์ฃผํค๊ฐ ์๋๋ฐ ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ฝ์ ํ์ฌ๋ ์๊ด์ด ์์ผ๋ฏ๋ก ์ฝ์ ํ๋ค. ๋ค์์ save๋ฉ์๋์ ์ฃผ์ ๋ถ๊ธฐ์ ์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
def save(self): # First, try an UPDATE. If that doesn't update anything, do an INSERT. record_exists = True if pk_set: # Determine whether a record with the primary key already exists. cursor.execute("SELECT 1 FROM %s WHERE %s=%%s LIMIT 1" % \ # If it does already exist, do an UPDATE. if cursor.fetchone(): cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \ else: record_exists = False if not pk_set or not record_exists: if pk_set: # If the PK has been manually set, respect that. else: # Create a new record with defaults for everything. cursor.execute("INSERT INTO %s (%s) VALUES (%s)" %
delete ¶
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๋ ์์
์ Modelํด๋์ค์ delete๋ฉ์๋๋ก ์ถ์ํํ๋ค. ํ์ง๋ง ๋ด๋ถ์์ ์ค์ ๋ก ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๋ ๋ฉ์๋๋ delete_objects์ด๋ค.8 delete_objects๋ฉ์๋๋ ์ง์ฐ๋ ค๋ ๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๋ ๋ค๋ฅธ ํ
์ด๋ธ์ ๋ ์ฝ๋๊น์ง ํจ๊ป ์ญ์ ํ๊ฑฐ๋, ์ธ๋ํค๋ฅผ NULL๊ฐ์ผ๋ก ์ค์ ํ๋ค. ์๋ฅผ ๋ค์ด ๋ค์์ Riskํ
์ด๋ธ์์ ํ ๋ ์ฝ๋๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฐธ์กฐํ๋ Consequence, Control ํ
์ด๋ธ์ ๋ ์ฝ๋๊น์ง ํจ๊ป ์ญ์ ํ๋์ง๋ฅผ ๋ฌป๋ ์ฌ์ฉ์ ํ๋ฉด์ด๋ค.

----
django/Example

----
django/Example