[Python] Python Database API - Python์—์„œ๋Š” ์–ด๋–ป๊ฒŒ DB์™€ ์—ฐ๊ฒฐํ• ๊นŒ?

๋ฐ˜์‘ํ˜•

์˜ค๋Š˜์€ ๊ธฐ์ดˆ์ ์ธ ์ง€์‹์„ ๋Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.โ€‹

 

์šฐ๋ฆฌ๊ฐ€ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋ ˆ ๋“ฑ์žฅํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Database์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋„๋Œ€์ฒด ๋ฌด์—‡์ผ๊นŒ์š”?

 

 

 

What is Database ?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ˜„๋Œ€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(?)์„ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ์ž์—ฐ์Šค๋ ˆ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€, ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์—์„œ ์ „์ž์ ์œผ๋กœ ์ €์žฅ๋˜๊ณ  ์•ก์„ธ์Šค๋˜๋Š” ์กฐ์งํ™” ๋œ ๋ฐ์ดํ„ฐ ๋ชจ์Œ์„ ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ํ•œ๋งˆ๋””๋กœ ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ์ˆซ์ž, ๋ฌธ์ž ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์ž์ ์œผ๋กœ(๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ) ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ์กฐ์งํ™”ํ•˜์—ฌ ์•ก์„ธ์Šค ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

 

๊ทธ๋Ÿผ DBMS๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? DBMS๋Š” Database Management System์˜ ์•ฝ์ž๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ์ž์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์— ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์•ก์„ธ์Šคํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์ž์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์ง€๋งŒ ์‚ฌ๋žŒ์ด ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์—†์–ด, ์ด๋ฅผ ์ƒํ˜ธ์ž‘์šฉ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ธ ๊ฒƒ์ด์ง€์š”.

 

๊ฐ€๋ น ์šฐ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— "Neon K.I.D ๋ธ”๋กœ๊ทธ | https://blog.neonkid.xyz" ์ด๋ ‡๊ฒŒ ์ €์žฅํ–ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ์ปดํ“จํ„ฐ๋Š” ์ด๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜์—ฌ ๋ณด๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ์˜ ์›์ดˆ ๊ณ„์‚ฐ์ธ ์ด์ง„์ˆ˜(0000100000) ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด์„ํ•˜๊ฑฐ๋‚˜ ์ฝ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ €์žฅํ•˜๊ณ , ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ DBMS ์ž…๋‹ˆ๋‹ค.

 

 

 

Python์—์„œ DB์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

Python์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์—๋Š” pyODBC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. pyODBC๋Š” ODBC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Database๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌํ˜„์ฒด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ODBC์— ๋Œ€ํ•ด์„œ ์ž˜ ๋ชจ๋ฅด์‹ ๋‹ค๋ฉด, ์•„๋ž˜์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”.

 

 

๋ฆฌ๋ˆ…์Šค์—์„œ Unix ODBC๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž

์•ˆ๋…•ํ•˜์„ธ์š”. 2018๋…„์˜ ์—ฐ๋ง์ด ๋‹ค๊ฐ€์™”์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ 2018๋…„์˜ ๋งˆ์ง€๋ง‰ ํฌ์ŠคํŠธ๋กœ ์šฐ๋ถ„ํˆฌ์—์„œ Unix ODBC๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. What is ODBC? Unix ODBC๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์ „์—, ODBC๊ฐ€ ๋ฌด์—‡

blog.neonkid.xyz

๊ทธ๋Ÿฌ๋‚˜ ODBC๋Š” ์šด์˜์ฒด์ œ์— ๋งž๊ฒŒ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜๊ณ , ์„ค์น˜๋กœ ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๋“œ๋ผ์ด๋ฒ„์˜ ์œ„์น˜์™€ ODBC ์„ค์ •์„ ํ•ด์ค˜์•ผ๋งŒ ๋น„๋กœ์†Œ ์—ฐ๊ฒฐ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณต์žกํ•œ ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ๋ณต์žกํ•จ์„ ๋œ์–ด์ฃผ๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, Python์—์„œ๋Š” ์ด๋ฅผ DB API๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, API๋Š” ๋ญ์ฃ ?

 

 

 

What is API ?

API๋Š” Application Programming Interface์˜ ์•ฝ์ž๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ ๋˜๋Š” DBMS ๋˜๋Š” ํ†ต์‹  ํ”„๋กœํ† ์ฝœ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ œ์–ด ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด ๋ฐ ๋ฉ”์‹œ์ง€ ํ˜•์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค. 

 

๊ฐ€๋ น ์šฐ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ Python ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ C++, Java, Go, Rust ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด๊ฐ€ ์žˆ๊ณ  ํ•ด๋‹น ์–ธ์–ด์— ๋งž๊ฒŒ DB์™€ ์—ฐ๊ฒฐํ•˜๊ณ  ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์ œ์–ดํ•˜๋Š” ๋“ฑ ๊ทธ ์–ธ์–ด์— ๋งž๊ฒŒ ์ œ๊ณต๋˜๋Š” ํ˜•์‹์„ ๋งํ•˜๋Š” ๊ฒƒ์ด์ง€์š”. ์ด๋Ÿฌํ•œ API๋Š” ์‹คํ–‰์— ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ ๋‚ด ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์ž‘์„ฑํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

 

 

 

Python DBAPI 2.0

ํŒŒ์ด์ฌ์—์„œ๋Š” DB์™€ ์—ฐ๊ฒฐํ•˜๋Š” API๋ฅผ DBAPI(Database API)๋ผ ํ•ฉ๋‹ˆ๋‹ค. DBAPI๋Š” ํ˜„์žฌ 2.0๊นŒ์ง€ ๊ณ ์•ˆ๋˜์–ด ์žˆ๊ณ , ์ด๋Š” 2001๋…„ ์ฒ˜์Œ ๊ณ„ํš ๋˜์–ด(PEP249) ์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

Python์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. Application๊ณผ DB ์‚ฌ์ด์— Connector๊ฐ€ ์กด์žฌํ•˜๋ฉฐ(DB๋งˆ๋‹ค ๋‹ค๋ฆ„) ์ด ์ปค๋„ฅํ„ฐ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— DB๋กœ ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. DB์—์„œ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๋ฉด, ์ปค์„œ๋ฅผ ์ด์šฉํ•ด SQL ์ฟผ๋ฆฌ๋ฅผ ์งˆ์˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

Python DBAPI ๊ฐœ๋…

DB API์˜ ๊ตฌ์กฐ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Database์—์„œ ํ•„์š”ํ•œ ์—ฐ๊ฒฐ ๊ฐ์ฒด(DB ์—ฐ๊ฒฐ)์™€ ์ปค์„œ ๊ฐ์ฒด(๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐ ์˜์†)๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๋จผ์ € ์—ฐ๊ฒฐ ๊ฐ์ฒด(Connection Objects)์—๋Š” ์•„๋ž˜์˜ 4๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

 

  1. cursor(factory=Cursor)
    cursor ๋ฉ”์„œ๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์œผ๋กœ ์ƒ์„ฑํ•˜๋ฉฐ, ์—ฐ๊ฒฐ๋œ DB๋กœ Cursor ๊ฐ์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
    Cursor ๊ฐ์ฒด์—๋Š” SQL ์งˆ์˜(Query)๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋กœ SELECT ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (INSERT, UPDATE์™€ ๊ฐ™์€ DB ๋‹จ์ผ ์ ์šฉ ์ฟผ๋ฆฌ๋Š” ์ œ์™ธ)

  2. commit()
    commit์€ ํ˜„์žฌ ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. (์ปค๋ฐ‹์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”.) ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๊ฐ€ ์˜์†๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  3. rollback()
    rollback์€ ๋งˆ์ง€๋ง‰ commit ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๋˜๋Œ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

  4. close()
    close๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „, ๋ฐ˜๋“œ์‹œ commit ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๊ฑธ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ๋‚ด์šฉ์ด ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

 

์ปค์„œ ๊ฐ์ฒด(Cursor Objects)์—๋„ ์•„๋ž˜์˜ 4๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. 

 

  1. execute(sql[, parameters])
    SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” SQL์€ JPQL์ฒ˜๋Ÿผ ํŒŒ๋ผ๋ฏธํ„ฐํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

  2. executemany(sql, seq_of_parameters)
    ๋งคํ•‘์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.
    ex) INSERT INTO members (name, city) VALUES = (%s, %s), [('์ด์—ฐ', '๋ถ€์‚ฐ'), ('์ด๋ฐ€', '์„œ์šธ')]

  3. fetchone()
    ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์—์„œ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ํ–‰์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์•„๋ฌด๋Ÿฐ ๋ฐ์ดํ„ฐ๋„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ None์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  4. fetchmany(size=cursor.arraysize)
    ๋ชจ๋“  ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์•„๋ฌด๋Ÿฐ ๋ฐ์ดํ„ฐ๋„ ์—†๋Š” ๊ฒฝ์šฐ ๋นˆ ๋ฆฌ์ŠคํŠธ(emtpy list, [])๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 
    ๋งค๊ฐœ๋ณ€์ˆ˜์ธ size๋Š” ํ•œ ๋ฒˆ ํ˜ธ์ถœ๋‹น ๊ฐ€์ ธ์˜ฌ ์ตœ๋Œ€์˜ ํ–‰์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ cursor์—์„œ DB๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ ๋ฐฐ์—ด ํฌ๊ธฐ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

 

Python์—์„œ๋Š” ์—ฐ๊ฒฐ ๊ฐ์ฒด์™€ ์ปค์„œ ๊ฐ์ฒด๋ฅผ ์ž˜ ์‚ฌ์šฉํ•  ์ค„๋งŒ ์•ˆ๋‹ค๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ DB์™€ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์˜์†, ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿฌ๋ฉด ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

DB API Example

์˜ˆ์ œ๋กœ ์šฐ๋ฆฌ๋Š” PostgreSQL์„ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ, PostgreSQL์„ ์„ค์น˜ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด Docker ๋“ฑ์„ ์ด์šฉํ•ด์„œ PostgreSQL์„ ์‹คํ–‰ํ•ด์ฃผ์„ธ์š”.

$ pip install psycopg2-binary
$ poetry add psycopg2-binary

pip ํ˜น์€ poetry ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ PostgreSQL DB Connector ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

connect ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งค๊ฐœ๋ณ€์ˆ˜์— DB ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋‹ค์Œ ์—ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•ด๋ด…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์ปค๋„ฅ์…˜์„ ๋‹ซ์Œ ๋‹ค์Œ์—๋„ ์—ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ถœ๋ ฅํ•ด๋ด…๋‹ˆ๋‹ค.

 

์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ•˜๋ฉด ๋‘ ๊ฐ์ฒด์˜ ๋ชจ์Šต์ด ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ๊ฐ์ฒด์—๋Š” dsn(DB ์—ฐ๊ฒฐ ์ •๋ณด)๊ณผ ํ˜„์žฌ ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ์—ฐ๊ฒฐ ์ค‘์ธ์ง€, ๋Š์–ด์กŒ๋Š”์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” closed๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

์ด์ œ ์—ฐ๊ฒฐ์ด ๋˜์—ˆ์œผ๋ฉด cursor๋ฅผ ๋„์›Œ์„œ SQL ๋ฌธ์„ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. memos๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜๊ณ  ์ œ๋ชฉ(title)๊ณผ content(๋‚ด์šฉ) ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ํ–‰์„ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ์ด๋ฅผ ์กฐํšŒํ•˜๋Š” SELECT ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค๋ดค์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด fetchone๊นŒ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋กœ๋“œํ•˜๊ณ  ์žˆ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ..............................

 

์–ด? ๋ถ„๋ช…ํžˆ CREATE TABLE, INSERT ์ฟผ๋ฆฌ๋ฅผ ๋„ฃ์–ด์„œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ํ–‰๊นŒ์ง€ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ, DBMS์— ์ ‘์†ํ•ด์„œ ๋ณด๋‹ˆ ๋‚˜์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ ๊ฒƒ์ผ๊นŒ์š”?

 

๋ฐ”๋กœ ์ปค๋ฐ‹(commit)์„ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. DBAPI์—์„œ DB ์—ฐ๊ฒฐ ํ›„ cursor๋ฅผ ์ด์šฉํ•ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ commit์„ ํ•ด์ฃผ์ง€ ์•Š๊ณ  DB ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ, ๊ณผ๊ฑฐ์— ์žˆ์—ˆ๋˜ ๋‚ด์šฉ๋“ค์€ ๋ชจ๋‘ ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

(์™œ๋ƒํ•˜๋ฉด, ์ปค๋ฐ‹์„ ํ•˜๊ธฐ ์ด์ „๊นŒ์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ๊ธฐ๋ก์ด ๋‚จ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค)

 

 

 

๋”ฐ๋ผ์„œ commit ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์ค˜์•ผ๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ commit ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

DBMS์— ์ ‘์†ํ•ด์„œ ํ™•์ธํ•˜๋ฉด title, content ์ปฌ๋Ÿผ์ด ์žˆ๋Š” memos ํ…Œ์ด๋ธ”์ด ๋งŒ๋“ค์–ด์กŒ๊ณ , ํ–‰ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ •ํ™•ํžˆ ์˜์†๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

DB API๋Š” ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€ API๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ปค๋„ฅ์…˜ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์€ ๊ฐ์ž ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•˜๋ฉฐ ๋Œ€์‹  ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•์ด๋‚˜ ์ปค๋„ฅ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์ปค์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

  • MySQL (mysql-connector-python)
  • PostgreSQL (psycopg2-binary)
  • Microsoft SQL Server (pymssql)
  • SQLite3 (sqlite3)

๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์•„์Šค ๋ฒค๋”๋ณ„๋กœ DBAPI๋ฅผ ์ง€์›ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์„ ๋ชจ์•„๋‘์—ˆ์Šต๋‹ˆ๋‹ค. pip, poetry ๋“ฑ์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ์„ค์น˜ ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

ํŒŒ์ด์ฌ ์–ธ์–ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ฒ˜์Œ ๋‹ค๋ฃจ์‹œ๋Š” ๋ถ„๋“ค์ด ๋งŽ์ด ์‚ฌ์šฉํ•˜์‹œ๋Š” ์–ธ์–ด ์ค‘์— ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์–ธ์–ด๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋ฉ”์‹œ์ง€ ํ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฏธ๋“ค์›จ์–ด ์—ฐ๊ฒฐ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰๋“ค์„ ๋งŽ์ด ํ•˜์‹œ๋Š”๋ฐ์š”.

 

์ด ๊ธ€์—์„œ ์ค‘์š”ํ•œ ์ ์€ Database์˜ ๊ธฐ์ดˆ์—†์ด๋Š” ์ด ๊ธ€์„ ์ฝ์ง€ ๋งˆ์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ์ดˆ์ ์ธ ์ง€์‹ (ํŠธ๋žœ์žญ์…˜, SQL)์„ ๊ฐ–์ถ˜ ๋‹ค์Œ ๋ณด๊ธฐ๋ฅผ ๊ถŒ์žฅํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋ณด๋‹จ Python ์–ธ์–ด์—์„œ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•  ๋•Œ ๋ณด์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments