< 공부한 내용 >
1. SQLite3
2. CRUD
3. MariaDB
4. MariaDB의 CRUD
1. SQLite3
''''
SQLite DB의 특징
- 내장형 데이터베이스
- 따라서 외부 접근 불가
- RDB (관계지향 데이터베이스)
- 일반 DB와 동일한 쿼리문 사용
- 다운로드 사이트 : https://www.sqlite.org/index.html
'''
'''
sqlite3 - 내장 DBMS
- 기기 내부에서만 사용
- 외부 접근 허용 안됨
'''
import sqlite3
print(sqlite3.sqlite_version_info) # (3, 28, 0)
try :
# db 연동 객체 : db 생성 + 연동
conn = sqlite3.connect("chap08_Database/data/sqlite.db")
# sql문 실행
cursor = conn.cursor()
# table 생성
sql = """create table if not exists test_tab(
name text(10),
phone text(15),
addr text(50)
)
"""
cursor.execute(sql) # 실제 table 생성
# 레코드 추가
cursor.execute("insert into test_tab values('홍길동', '010-111-1111', '서울시')")
cursor.execute("insert into test_tab values('이순신', '010-222-2222', '해남시')")
cursor.execute("insert into test_tab values('유관순', '010-333-3333', '충남시')")
# 레코드 조회
cursor.execute("select * from test_tab")
rows = cursor.fetchall()
# fetchall() : 객체 안에 있는 모든 값을 가져온다
for row in rows :
#print(row) # tuple
print(row[0], row[1], row[2])
except :
# db 연동 error 처리
print('db 연동 error')
conn.rollback() # db 반영 취소
finally :
# db 연동 객체 close - 나중에 만들어진 객체를 먼저 닫는게 일반적
cursor.close()
conn.close()
2. CRUD
'''
CRUD
- Create, Read, Update, Delete
commit() / rollback()
- commit() : db 반영
- rollback() : db 반영 취소
'''
# 주의사항 : try-except문 안에서 CRUD 실습을 해본 것으로, 1. table생성, 2. 레코드 추가, ... 순서대로 하나하나 실행하면서 실행 후에는 주석처리(중복 생성 등의 오류를 막기 위해)
import sqlite3
try : # db 연동 객체 생성, slq 실행
conn = sqlite3.connect('chap08_Database/data/sqlite.db')
# sql 실행 객체
cursor = conn.cursor()
# sql문 작성 -> sql 실행
# 1. table 생성 : 제약조건 적용
sql = """create table if not exists goods(
code integer primary key,
name text(30) unique not null,
su integer default 0,
dan real default 0.0
)"""
cursor.execute(sql) # sql 실행 : table 생성
# 2. 레코드 추가
'''
cursor.execute("insert into goods values(1, '냉장고', 2, 850000)")
cursor.execute("insert into goods values(2, '세탁기', 3, 550000)")
cursor.execute("insert into goods(code, name) values(3, '전자레인지')") # su, dan 생략
cursor.execute("insert into goods(code, name, dan) values(4, 'HDTV', 1500000)") # su 생략
conn.commit() # db 반영
'''
# 2. 레코드 추가 : 키보드 입력
'''
code = int(input("코드 입력 : ")) # 5
name = input("상품명 입력 : ") # 가스레인지
su = int(input("수량 입력 : ")) # 3
dan = float(input("단가 입력 : ")) # 350000
# java : "insert into goods values(?, ?, ?, ?)"
sql =f"insert into goods values({code}, '{name}', {su}, {dan})"
cursor.execute(sql) # 레코드 추가
conn.commit() # db 반영
'''
# 5. 레코드 수정 : 검색 : code, 수정 칼럼 : name, su, dan
'''
code = int(input("수정 코드 입력 : ")) # 5
name = input("수정 상품명 입력 : ") # 가스레인지 -> gas range
su = int(input("수정 수량 입력 : ")) # 3 -> 2
dan = float(input("수정 단가 입력 : ")) # 350000 -> 450000
sql = f"update goods set name = '{name}', su = {su}, dan = {dan} where code = {code}"
cursor.execute(sql)
conn.commit() # db 반영
'''
# 6. 레코드 삭제 : code 칼럼
'''
code = int(input("삭제 코드 입력 : ")) # 5
# select
sql = f"select * from goods where code = {code}"
cursor.execute(sql)
rows = cursor.fetchall()
if rows : # True = 해당 code
# delete
sql = f"delete from goods where code = {code}"
cursor.execute(sql)
conn.commit() # db 반영
else :
print('해당 코드 없음')
'''
# 3. 레코드 조회 : 전체 레코드
sql = "select * from goods"
cursor.execute(sql) # 레코드 조회
rows = cursor.fetchall() # 레코드 가져오기
for row in rows :
print(row[0], row[1], row[2], row[3])
print('전체 레코드 수 = ', len(rows))
# 4. 레코드 조회 : 수량 2개 이상 조건 검색
sql = "select * from goods where su >= 2"
cursor.execute(sql)
rows = cursor.fetchall()
for row in rows :
print(row[0], row[1], row[2], row[3])
print('전체 레코드 수=', len(rows))
# 4. 레코드 조회 : 상품명 조회
name = input("조회할 상품명 : ")
sql = f"select * from goods where name like '%{name}%'" # 포함문자 '%name%' 검색
cursor.execute(sql)
rows = cursor.fetchall()
if rows : # null = False
for row in rows :
print(row[0], row[1], row[2], row[3])
print('검색된 레코드 수 =', len(rows))
else :
print('해당 상품이 없습니다.')
except Exception as e : # 예외 처리
print('db 연동 error : ', e)
conn.rollback() # db 반영 취소
finally: # 객체 닫기(역순)
cursor.close()
conn.close()
3. MariaDB
'''
MariaDB의 특징
- RDB : 관계지향 데이터베이스
- Mysql 개발자에 의해서 개발됨
- Mysql과 동일한 쿼리문 사용
- 크기 대비 고성능
- 다운로드 사이트 : http://mariadb.org/
'''
'''
이 실습을 위해서는 MariaDB를 설치하고 user ID와 password를 지정해놓아야한다. (본인은 user : root, pw : 1234 사용)
'''
설치 이후, MySQL Client 실행 후 비밀번호 입력하고 데이터베이스를 확인한다.
PyCharm의 File - Settings 에서 PyMySQL 라이브러리를 설치한다
** PyCharm에서 MariaDB 사용 준비 완료!!
'''
mariaDB 연동 TEST
'''
import pymysql
print(pymysql.version_info) # (1, 3, 12, 'final', 0)
config = {
'host' : '127.0.0.1',
'user' : 'root',
'password' : '1234',
'database' : 'work',
'port' : 3306,
'charset':'utf8',
'use_unicode' : True}
try :
# db 환경변수 -> db 연동 객체
conn = pymysql.connect(**config)
# **config : config에 들어있는 7개의 환경변수를 이용해서 DB를 연동한다는 의미
# sql 실행 객체
cursor = conn.cursor()
print("db 연동 성공!")
sql = "show tables"
cursor.execute(sql)
tables = cursor.fetchall()
if tables :
print('table 있음')
else :
print('table 없음')
except Exception as e :
print('db 연동 error :', e)
finally :
cursor.close()
conn.close()
4. MariaDB의 CRUD
import pymysql
config = {
'host' : '127.0.0.1',
'user' : 'root',
'password' : '1234',
'database' : 'work',
'port' : 3306,
'charset':'utf8',
'use_unicode' : True}
try :
conn = pymysql.connect(**config)
cursor = conn.cursor()
### 1 -> 2 -> (3: 계속 실행) -> 4 -> 5 순서대로 입력 실행해보면서 실행해본건 주석처리함
# 1. table
'''
sql = """create table goods(
code int primary key,
name varchar(30) not null,
su int default 0,
dan int default 0
)"""
cursor.execute(sql) # table 생성
# table 생성은 commit을 하지 않아도 auto-commit이라서 자동으로 됨
'''
# 2. 레코드 추가
'''
code = int(input("코드 입력 : "))
name = input("상품명 입력 : ")
su = int(input("수량 입력 : "))
dan = int(input("단가 입력 : "))
sql = f"insert into goods values({code}, '{name}', {su}, {dan})"
cursor.execute(sql) # 레코드 추가
conn.commit() # db 반환
'''
# 4. 레코드 수정 : code 기준 -> name, su, dan 수정
'''
code = int(input("수정 코드 : "))
name = input("수정 상품명 : ")
su = int(input("수정 수량 : "))
dan = int(input("수정 단가 : "))
sql = f"update goods set name='{name}', su={su}, dan={dan} where code={code}"
cursor.execute(sql)
conn.commit() # db 반영
'''
# 5. 레코드 삭제 : code 기준
'''
code = int(input("삭제 코드 : "))
sql = f"select * from goods where code = {code}"
cursor.execute(sql)
row = cursor.fetchall()
if row :
sql = f"delete from goods where code = {code}"
cursor.execute(sql) # 삭제
conn.commit() # db 반영
else :
print("해당 코드 없음")
'''
# 3. 레코드 조회 : 전체 레코드
sql = "select * from goods"
cursor.execute(sql)
rows = cursor.fetchall()
for row in rows :
print(f"{row[0]} {row[1]} {row[2]} {row[3]}")
# 3. 레코드 조회 : 상품명(포함문자 검색)
name = input("조회 상품명 : ")
sql = f"select * from goods where name like '%{name}%'"
cursor.execute(sql)
rows = cursor.fetchall()
if rows :
for row in rows :
print(row)
else :
print("해당 상품은 존재하지 않습니다")
except Exception as e :
print('db error 발생 :', e)
finally :
cursor.close()
conn.close()
---------------------------------------------- example ----------------------------------------------
'Python 과 머신러닝 > I. 기초 문법' 카테고리의 다른 글
Python 기초 8장. DB 연동 (2) (0) | 2019.10.14 |
---|---|
Python 기초 7장. 파일 입출력 (0) | 2019.10.10 |
Python 기초 6장. 클래스(Class) (0) | 2019.10.02 |
Python 기초 5장. 함수 (2) (0) | 2019.09.30 |
Python 기초 5장. 함수 (1) (0) | 2019.09.30 |
댓글