Upgrade to PRO for Only $50/Yearโ€”Limited-Time Offer! ๐Ÿ”ฅ

Python Study 5- Database

Python Study 5-ย Database

Avatar for AhnSeongHyun

AhnSeongHyun

May 18, 2015
Tweet

More Decks by AhnSeongHyun

Other Decks in Programming

Transcript

  1. PEP249 3 ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค API ๋ช…์„ธ์„œ ๋ฒ„์ „ 2.0 = PEP249

    - ๋ชจ๋“  ํŒŒ์ด์ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค API๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ PEP249 ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋”ฐ๋ฅด๋„๋ก ๊ถŒ์žฅ - connect(), close(), - commit(), rollback(), cursor() - callproc(), execute(), fetchall() .. - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จํ•ด์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•  ํ•จ์ˆ˜๋“ค์„ ์ •์˜. ๋งํฌ : http://legacy.python.org/dev/peps/pep-0249/
  2. PEP249 4 ์—ฐ๊ฒฐ - Connection ๊ฐ์ฒด c = connect(params) ํ•จ์ˆ˜

    ์ œ๊ณต - params : dsn, user, password, host, database ๋“ฑ์˜ ์ •๋ณด - return : Connection ๊ฐ์ฒด c.close() - ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ ๋‹ซ๊ธฐ c.commit() - ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์„ ๋””๋น„์— ์ปค๋ฐ‹. ์ˆ˜์ •ํ•œ ๋‚ด์šฉ ๋ฐ˜์˜(ํŠธ๋žœ์žญ์…˜ ์ง€์› DB ์— ํ•œํ•จ.) c.rollback() - ํŠธ๋žœ์žญ์…˜์˜ ์‹œ์ž‘์ง€์ ์œผ๋กœ ๋Œ๋ฆฌ๊ธฐ. cur = c.cursor() - Connect() ํ•จ์ˆ˜์˜ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด Cursor ๊ฐ์ฒด ๋งŒ๋“ ๋‹ค. - ์ปค์„œ(Cursor)๋Š” sql ์งˆ์˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด
  3. PEP249 5 ์งˆ์˜ ์ˆ˜ํ–‰ - Cursor ๊ฐ์ฒด cur.callproc(procname [, parameters])

    - ์ €์žฅํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ - procname : ์ €์žฅํ”„๋กœ์‹œ์ € ์ด๋ฆ„ cur.close() - ์ปค์„œ๋ฅผ ๋‹ซ์•„์„œ ์—ฐ์‚ฐ์ˆ˜ํ–‰ x cur.execute(query [, parameters]) - sql ์‹คํ–‰, query : sql, paramters : sql ๋ฌธ์ž์—ด์— ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ํ• ๋‹น๊ฐ’. cur.executemany(query [, paramtersequence]) - sql ์„ ๋ฐ˜๋ณต์‹คํ–‰
  4. PEP249 6 ์งˆ์˜ ์ˆ˜ํ–‰ - Cursor ๊ฐ์ฒด cur.fetchone() - execute(),

    executemany() ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ์—์„œ ๋‹ค์Œํ–‰์„ ๋ฐ˜ํ™˜(๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ) - ํ–‰์ด ์—†์œผ๋ฉด None cur.fetchmany([size]) - ๊ฒฐ๊ณผํ–‰์„ ์‹œํ€€์Šค ๋ฐ˜ํ™˜, list(tuple()), size ๋Š” ๋ฐ˜ํ™˜ํ•  ํ–‰์˜ ์ˆ˜ cur.fetchall() - ๋‚จ์€ ๊ฒฐ๊ณผ์˜ ๋ชจ๋“  ํ–‰์˜ ์‹œํ€€์Šค ๋ฐ˜ํ™˜ cur.arraysize - fetchmany() ์—ฐ์ƒ์„ธ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’ ์ •์ˆ˜, ๋‚ด๋ถ€์—์„œ ์ตœ์ ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ๊ฐ’์œผ๋กœ ์„ค์ •๋จ. cur.rowcount - execute() ์‹คํ–‰์‹œ ๊ฒฐ๊ณผ์˜ ํ–‰์˜ ์ˆ˜, -1์˜ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ.
  5. SQL๋ฌธ ํŒŒ๋ผ๋ฏธํ„ฐ ์ง€์ • ๋ฐฉ์‹ 7 qmark, numeric, named, format ๋“ฑ์˜

    ๋ฐฉ์‹ ์กด์žฌ, ํ‘œ์ค€์€ ์—†์Œ. ๋ฌธ์ž์—ด ๋ฐฉ์‹ named ๋ฐฉ์‹ numeric ๋ฐฉ์‹
  6. SQL๋ฌธ ํŒŒ๋ผ๋ฏธํ„ฐ ์ง€์ • ๋ฐฉ์‹ 8 qmark, numeric, named, format ๋“ฑ์˜

    ๋ฐฉ์‹ ์กด์žฌ, ํ‘œ์ค€์€ ์—†์Œ. qmark ๋ฐฉ์‹ format ๋ฐฉ์‹
  7. sqlite 10 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•„์š”ํ•œ๊ฒƒ์„ ๋ชจ๋‘ ํŒŒ์ผ์— ๋‘๋Š”

    ํ˜•ํƒœ ์„œ๋ฒ„ ํ•„์š” ์—†๊ณ , ์„ค์ • ํ•„์š” ์—†๋‹ค. ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. ๏ƒผ Firefox์˜ ํ™•์žฅ๊ธฐ๋Šฅ - SQLite Manager ๋ฅผ ์„ค์น˜ - ์ผ์ข…์˜ ํด๋ผ์ด์–ธํŠธ ํˆด
  8. sqlite3 11 ๏ƒ˜ sqlite3 ๋ชจ๋“ˆ ์‚ฌ์šฉ ๏ƒ˜ connect : DB

    ์—ฐ๊ฒฐ๊ฐ์ฒด ๋ฐ˜ํ™˜ ๏ƒ˜ execute : sql ์‹คํ–‰ ๏ƒ˜ cursor : DB ์—ฐ๊ฒฐ๊ฐ์ฒด ๋ฐ˜ํ™˜ sqlite3 ๋ชจ๋“ˆ = SQLIte ๋ฐ์ด๋ฒ„๋ฒ ์ด์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ connect - cursor - close
  9. sqlite3 12 > <sqlite3.Cursor object at 0x02555020> > (0, u'ash84')

    fetchone() - ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
  10. sqlite3 14 1 [(1, u'ash84'), (2, u'ash84'), (3, u'ash84'), (4,

    u'ash84'), (5, u'ash84'), (6, u'ash84'), (7, u'ash84'), (8, u'ash84'), (9, u'ash84'), (10, u'ash84')] 1 [(12, u'ash84'), (13, u'ash84'), (14, u'ash84'), (15, u'ash84'), (16, u'ash84'), (17, u'ash84'), (18, u'ash84'), (19, u'ash84'), (20, u'ash84'), (21, u'ash84')] fetchmany() - ๋‚จ์€ ๊ฒฐ๊ณผ๋ฅผ ์ง€์ •ํ•œ ๊ฐœ์ˆ˜๋งŒํผ ๊ฐ€์ ธ์™€์„œ ๋ณด์—ฌ์ฃผ๊ธฐ
  11. sqlite3 16 In-memory DB - ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ž„์‹œ๋กœ ๋งŒ๋“œ๋Š” ํ˜•ํƒœ

    - ํŒŒ์ด์ฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ค‘์ผ๋•Œ๋งŒ ์œ ์ง€, ์ข…๋ฃŒ์‹œ ์—†์–ด์ง. - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ ์ด๋ฆ„ ๋Œ€์‹  โ€œ:memory:โ€ ๋กœ ์“ด๋‹ค.
  12. sqlite3 18 ์‚ฌ์šฉ์ž ์ •์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜ - create_aggregate(โ€˜sql์— ์“ธ ํ•จ์ˆ˜๋ช…โ€™,

    ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐœ์ˆ˜, ์‹ค์ œ ํด๋ž˜์Šค๋ช…) ๋‘๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ. - step : ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๋Š” ์—ญํ•  - finalize : ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• 
  13. sqlite3 19 ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์€ ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜์™€ ๋น„์Šท ์ค‘์š”ํ•œ๊ฒƒ์€ ํด๋ž˜์Šค

    ํ˜•์‹์„ ๋งž์ถฐ์ฃผ๋Š” ๊ฒƒ. ์‚ฌ์šฉ์ž ์ •์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„
  14. sqlite3 20 c.total_changes - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ›„, ์ˆ˜์ •๋œ ํ–‰์˜ ๊ฐœ์ˆ˜

    c.interrupt() - ํ˜„์žฌ ์—ฐ๊ฒฐ์—์„œ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ sql ์„ ์ทจ์†Œ, ๋ณดํ†ต ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ํ˜ธ์ถœ sqlite3.complete_statement - sql ๋ฌธ์˜ ์„ธ๋ฏธ์ฝœ๋ก  ํ™•์ธ
  15. ํƒ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง€์› 21 PEP249 SQLite mysql mssql oracle postgresql

    ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ๋ชจ๋“ˆ ์„œ๋“œํŒŒํ‹ฐ ๋ชจ๋“ˆ๋กœ ์ง€์› ๊ฒฐ๊ตญ ๊ฐ์ข… ORM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, django, SQLAlchemy ์—์„œ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ์„œ๋“œํŒŒํŠธ ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„๋จ.
  16. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ 22 DB ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ช… ๋งํฌ ์„ค์น˜ mssql pymssql

    http://pymssql.org/en/latest/ https://code.google.com/p/pymssql/wiki/ Documentation(ํ•œ๊ตญ์–ด๋ฒˆ์—ญ) Pip install pymssql Postgresql psycopg http://initd.org/psycopg pip install psycopg2 mysql MySQLdb http://sourceforge.net/projects/mysql-pyt hon/ ๋งํฌ์—์„œ ๋ฐ›์•„์„œ setup.py ์„ค์น˜ Oracle cx-oracle http://cx-oracle.readthedocs.org/en/latest /index.html Pip install cx-oracle https://wiki.python.org/moin/DatabaseInterfaces ๏ƒผ ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๋Š” DB์˜ ๋ฒ„์ „ ํ™•์ธ ํ•„์ˆ˜.
  17. MySQLdb ์˜ˆ์ œ 23 ์„ค์น˜ - http://sourceforge.net/projects/mysql-python/ - ์œ„์˜ ์ฃผ์†Œ์— ๊ฐ€์„œ

    ์„ค์น˜ํŒŒ์ผ๋กœ ์„ค์น˜, - lib/site-packages/MySQLdb ์— ์„ค์น˜๋จ.
  18. MySQLdb 24 ๊ธฐ๋ณธ์ ์œผ๋กœ PEP249๋ฅผ ์ค€์ˆ˜. - connect โ€“ cursor โ€“

    close ๏ƒผ ๊ทธ๋Ÿฌ๋‚˜ ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.
  19. MySQLdb 25 ๏ƒผ connect ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค - host, port, db,

    user, passwd, unix_socket - compress : ํ”„๋กœํ† ์ฝœ ์••์ถ•์—ฌ๋ถ€ ์„ค์ • - init_command : ์‹œ์ž‘ํ•˜์ž๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•  ๋ช…๋ น์–ด - use_unicode : True ๋กœ ์ง€์ •์‹œ CHAR, VARCHAR, TEXT ์ปฌ๋Ÿผ์˜ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋“ค์„ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค. - charset : MySQL4.1 ์ดํ›„๋ถ€ํ„ฐ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ, ์ด ์˜ต์…˜์€ use_unicode=True ๋ฅผ ๋‚ดํฌํ•˜๊ณ  ์žˆ์Œ. - cursorclass : cursor() ๋ฅผ ์‚ฌ์šฉ, ๋”ฐ๋กœ ๋งŒ๋“  ๊ฒฝ์šฐ๋ผ๋ฉด ์ง€์ •
  20. MySQLdb 26 ๋‹ค์–‘ํ•œ cursor ๏‚ง BaseCusor - ์ปค์„œ ๊ฐ์ฒด์˜ ๊ธฐ๋ณธ

    ํด๋ž˜์Šค ๏‚ง CursorStoreResultMixIn - C ํ•จ์ˆ˜ mysql_store_result() ํ•ด๋‹นํ•˜๋Š” ์—ญํ•  - ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ•œ๊บผ๋ฒˆ์— ๋ฐ›์•„์™€์„œ ํด๋ผ์ด์–ธํŠธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ. ๏‚ง CursorUseResultMixIn - C ํ•จ์ˆ˜ mysql_use_result() ํ•ด๋‹นํ•˜๋Š” ์—ญํ•  - ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„์—์„œ ํ•œ๊ฑด์”ฉ ๊ฐ€์ ธ์˜จ๋‹ค. ๏‚ง CursorTupleRowsMixIn - ๊ฒฐ๊ณผ row๋ฅผ tuple ํ˜•ํƒœ๋กœ ๋ฆฌํ„ด ๏‚ง CursorDictRowsMixIn - ๊ฒฐ๊ณผ row๋ฅผ dict ํ˜•ํƒœ๋กœ ๋ฆฌํ„ด
  21. MySQLdb 27 ๏‚ง Cursor - ๊ธฐ๋ณธ ์ปค์„œ - CursorStoreResultMixIn +

    CursorTupleRowsMixIn + BaseCursor - ๊ฒฐ๊ณผ๋ฅผ ํŠœํ”Œ๋กœ ๋ฐ˜ํ™˜ ๏‚ง DictCursor - Cursor ์™€ ์œ ์‚ฌ, ๊ฒฐ๊ณผ๋ฅผ dict ์œผ๋กœ ๋ฐ˜ํ™˜ ๏‚ง SSCursor(Server-side Cursor) - Cursor์™€ ์œ ์‚ฌ, CursorUseResultMixIn ๋ฅผ ์‚ฌ์šฉ - ํฐ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ˆ์ƒ๋ ๋•Œ ์‚ฌ์šฉ ๏‚ง SSDictCursor - SSCursor ์˜ dict ๊ฒฐ๊ณผ ํ˜•ํƒœ
  22. MySQLdb 28 paramstyle : format - C์–ธ์–ด์˜ printf %d, %s

    ์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ - ํ˜•์— ์ƒ๊ด€์—†์ด %s ๋กœ ํ†ต์ผํ•ด์„œ ์‚ฌ์šฉํ•จ. ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ, ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‘๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ, tuple ํ˜•ํƒœ๋กœ ()
  23. MySQLdb 29 execute(), executemany() - sqlite3 ์™€ ๋‹ค๋ฅด๊ฒŒ cursor ๊ฐ€

    ์•„๋‹Œ ๊ฒฐ๊ณผ์˜ ํ–‰๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ - ๊ฒฐ๊ณผ ์ž์ฒด๋Š” fetchone, fetchall, fetchmany ํ•จ์ˆ˜๋กœ. 10 ((2L, 20L, 'ash84'), (3L, 21L, 'ash84'), (4L, 22L, 'ash84'), (5L, 23L, 'ash84'), (6L, 24L, 'ash84'), (7L, 25L, 'ash84'), (8L, 26L, 'ash84'), (9L, 27L, 'ash84'), (10L, 28L, 'ash84'), (11L, 29L, 'ash84'))
  24. ์ •๋ฆฌ 30 PEP249, ํ•œ๋ฒˆ์ฏค ์ฝ์–ด๋ณด์ž CONNECT โ€“ CURSOR โ€“ CLOSE

    SQLite ๋ฅผ ์ œ์™ธํ•˜๊ณค ๋ชจ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™•์ธ - ํŒŒ์ด์ฌ ๋ฒ„์ „ ํ™•์ธ - DB ์ง€์› ๋ฒ„์ „ ํ™•์ธ - ๋ผ์ด์„ ์Šค ํ™•์ธ - ํŒŒ๋ผ๋ฏธํ„ฐ ํ‘œ๊ธฐ๋ฒ• MSSQL ๊ณผ์˜ ์—ฐ๋™์€.. ๋ฐ˜๋“œ์‹œ!!