빅데이터 프로그래밍/Python

[Python] 21. [DBMS] Sqlite3 + Python 연동 실습

밍글링글링 2017. 8. 5.
728x90

[01] Sqlite3 + Python 연동 실습
1. database 생성 방법
1) sqlite3.exe test.db를 통한 생성
2) Python 소스를 통한 생성


2. Python 소스를 이용한 데이터베이스 파일과 테이블 자동 생성

- Python 소스가 있는 폴더에 생성됩니다.

▷ /sqlite3/create_table.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import sqlite3

# python.db 파일이 존재하지 않아도 정상 실행됨.
conn = sqlite3.connect('python.db')
cursor = conn.cursor()

cursor.execute('''
CREATE TABLE phonebook(
  name CHAR(32), 
  phone CHAR(32), 
  email CHAR(64) PRIMARY KEY
)
''')

cursor.close()
conn.close()


-------------------------------------------------------------------------------------

 

3. Insert

- conn.commit(): DBMS에 저장을 적용 시키는 트랜잭션 명령어
- cursor.lastrowid: 데이터베이스 테이블에 기본적으로 등록되는 레코드의 번호이며
                        개발자가 SELECT는 할 수 없음. 
레코드를 모두 지우고 다시 insert하면 1부터 시작함.

▷ /sqlite3/insert_record.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import sqlite3

conn = sqlite3.connect('python.db')
cursor = conn.cursor()

cursor.execute("""
  INSERT INTO phonebook (name, phone, email) 
  VALUES(?, ?, ?)
  """,
  ('가길동', '021-322-1542', 'mail1@mail.com')
)

id = cursor.lastrowid
print(id)

cursor.execute("""
INSERT INTO PHONEBOOK (NAME, PHONE, EMAIL) 
VALUES(?, ?, ?)
""", ('나길동', '021-445-2424', 'mail2@mail.com'))

id = cursor.lastrowid
print(id)

conn.commit()

cursor.close()
conn.close()
  
  
-------------------------------------------------------------------------------------

 

4. Select list

- cursor.fetchall(): 모든 레코드의 산출
- cursor.fetchone(): 하나의 레코드 산출 
 
[실행 화면]

NAME: 가길동, PHONE: 021-322-1542, EMAIL: mail1@mail.com 
NAME: 나길동, PHONE: 021-445-2424, EMAIL: mail2@mail.com 
 
▷ /sqlite3/select_record.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import sqlite3

conn = sqlite3.connect('python.db')
cursor = conn.cursor()

cursor.execute("""
  SELECT name, phone, email
  FROM phonebook
  ORDER BY email ASC
""")

rows = cursor.fetchall() # 모든 레코드의 산출
for row in rows:
    print ("NAME: {0}, PHONE: {1}, EMAIL: {2} ".  format(row[0], row[1], row[2]))

cursor.close()
conn.close()


-------------------------------------------------------------------------------------
 

 

4. Select read
- cursor.fetchall(): 모든 레코드의 산출
- cursor.fetchone(): 하나의 레코드 산출 
 
[실행 화면]

NAME: 가길동, PHONE: 021-322-1542, EMAIL: mail1@mail.com 
 
▷ /sqlite3/select_read.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import sqlite3

conn = sqlite3.connect('python.db')
cursor = conn.cursor()

cursor.execute("""
  SELECT name, phone, email
  FROM phonebook
  WHERE name=?
  ORDER BY email ASC
""", ('가길동',)
)

row = cursor.fetchone() # 하나의 레코드 산출
print ("NAME: {0}, PHONE: {1}, EMAIL: {2} ".  format(row[0], row[1], row[2]))

cursor.close()
conn.close()


-------------------------------------------------------------------------------------
 
 

 

5. Update
 
[실행 화면]
NAME: 아로미, PHONE: 000-1111-2222, EMAIL: mail1@mail.com 

▷ /sqlite3/update_record.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import sqlite3

conn = sqlite3.connect('python.db')
cursor = conn.cursor()

cursor.execute("""
  UPDATE phonebook 
  SET phone=?, name=? 
  WHERE email=?
  """, ('000-1111-2222', '아로미', 'mail1@mail.com'))

conn.commit()

cursor.execute("""
  SELECT name, phone, email
  FROM phonebook
  WHERE email=?
  """, ('mail1@mail.com',))

row = cursor.fetchone()
print ("NAME: {0}, PHONE: {1}, EMAIL: {2} ". format(row[0], row[1], row[2]))

cursor.close()
conn.close()

-------------------------------------------------------------------------------------

 

6. 삭제
-  ('mail1@mail.com',): 하나의 값 전달시 ',' 생략하지 말것.

▷ /sqlite3/delete_record.py
-------------------------------------------------------------------------------------
# -*- coding: utf-8 -*-

import sqlite3

conn = sqlite3.connect('python.db')
cursor = conn.cursor()

cursor.execute("""
  DELETE FROM phonebook
  WHERE email=?
  """, ('mail1@mail.com',))

conn.commit()

cursor.execute("""
  SELECT name, phone, email
  FROM phonebook
  ORDER BY email ASC
""")

rows = cursor.fetchall()
for row in rows:
    print ("NAME: {0}, PHONE: {1}, EMAIL: {2} ". format(row[0], row[1], row[2]))

cursor.close()
conn.close()
  

-------------------------------------------------------------------------------------
 

728x90

댓글