pymysql์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ data๋ฅผ insertํ ๋, ๋ง์ฝ connection์ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ค๊ฐ ๋๊ธฐ๋ ์ํฉ์ด ์๊ธธ ์ ์๋ค.
ORM์ ์ธ ๋์๋ ์ฌ์ค ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋ถ๋ถ์ธ๋ฐ, ๋ชจ๋ endpoint๋ฅผ ๋ง๋ค ๋ ์์ธ ์ฒ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ์ฐ๊ฒฐ ๋ฌธ์ ์ ๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๊ฐ๋ณด๋ค ์์ฒญ ์ค์ํ๋ค๋ ์ฌ์ค์ ์์๋ค. (์ค๋ณต ๋ฐ์ดํฐ, ํน์ ๋ฐ์ชฝ์ง๋ฆฌ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค์ด์ง ์ ์๊ธฐ ๋๋ฌธ์)
์ค์ํ ๋ฌธ์ ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
mysql์ ์ ์ํด์ auto-commit์ offํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฌธ์ ๋ auto-commit์ ํธ๋์ญ์ ๋จ์๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์, ๋ด๊ฐ ๋๋๋ผ๋ ๋ค์ on์ด ๋๋ค.
show variables like 'autocommit%'; # ์ค์ ํ์ธ
SET AUTOCOMMIT = TRUE; # ์๋ ์ ์ฅ ์ค์
SET AUTOCOMMIT = FALSE; # ์๋ ์ ์ฅ ํด์
์ค์ ๋ก ๊ตฌ๊ธ๋ง์ ํด์ ์์ฒ๋ผ mysql ์ค์ ์ ๋๋ ๋ฐฉ๋ฒ์ ์์๋์ง๋ง, mysql์ ์ข ๋ฃํ๊ณ ๋ค์ ์คํํ๋ฉด ์ค์ ์ off -> on์ผ๋ก ๋ณํด์๋ค ๐ญ
๋งํฌ์ ์ค๋ช ์ ๋ณด๋ฉด,
InnoDB์์๋ ๋ชจ๋ ์ ์ ์ ํ๋์ด ํ๋์ ํธ๋์ญ์ ์์์ ๋ฐ์ํ๊ณ , autocommit์ด ํ์ฑํ๋์ด ์์ ๋ ๊ฐ๊ฐ์ SQL statement๋ ํ๋์ ํธ๋์ญ์ ์ ๋ง๋ค๊ฒ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก MySQL ์ ์๋ก์ด ์ฐ๊ฒฐ์ ๋ํด autocommit์ด ํ์ฑํ๋์ด ์๋ ์ํ์์ ์ธ์ ์ ์์ํ๋ค.
๊ทธ๋์ ํ๋์ statement๊ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์๋ ์ด์ SQL statement ํ๋๋ฅผ ์คํํ ๋๋ง๋ค ๋ด์ฉ์ ์ ์ฅํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๋ด๊ฐ ์๋ฌด๋ฆฌ mysql์์ ์ค์ ์ ๋ฐ๊ฟ๋ดค์ ์ธ์ ์ด ๋๋ ๋๋ง๋ค ์ค์ ์ ๋ค์ ์ด๊ธฐํ๊ฐ ๋์ด์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋งค DAO ๋ง๋ค auto commit์ false๋ก ๋ฐ๊ฟ์ฃผ๋ SQL statement๋ฅผ ์คํํ๋ ๊ฒ๋ ์๊ฐํด๋ณด์๋ค.
cursor.execute์์ set autocommit = false๋ฅผ ์คํํด์ฃผ๋ ๊ฒ์ด๋ค.
์ฌ์ค ์์ ์ค์ ๋ค์ ์ฝ์ง์ ํ๋ค๊ฐ ์ป์ด๋ธ ๊ฒฐ๊ณผ์ด๊ณ , ๊ฒฐ๋ก ์ ์ผ๋ก๋ db connection์์ parameter๋ฅผ ๋ฐ๊ฟ์ฃผ๋ฉด ๋๋ค.... ใ ใ ใ
๋งํฌ์ ๋ค์ด๊ฐ๋ณด๋ฉด connection object๊ฐ ๋์์๋ค. ๋ด db ๊ด๋ จ ์ค์ ์ ์ ์ฅํ๋ ํ์ผ์์ autocommit์ false๋ก ํด์ฃผ๋ฉด ๋๋ค๊ณ ํ๋ค.
์ฌ์ค ์ด๋ ๊ฒ ํด๋ ์ด๋ค ์ปดํจํฐ์์๋ ๋๊ณ ์ด๋ค ์ปดํจํฐ์์๋ ์ ๋ผ์ ๋ ๋ํญ์ ๊ฒช์์ง๋ง... ์ฐ์ db_connection์ด ์์ ๋ ์์ธ๋ฅผ ๋ง๋๋ฉด rollbackํ๋ ๋ฐฉ์์ผ๋ก ๋ก์ง์ ์ง๊ณ ์๋ค ๐
db = {
'user' : 'root',
'password' : '',
'host' : 'localhost',
'port' : '3306',
'database' : 'brandiv1',
'charset' : 'utfmb4',
'autocommit' : False
}