Python-DB
Python SQLite
SQLite는 별도의 DB서버가 필요없이 DB 파일에 기초하여 데이터 베이스 처리를 구현한 Embedded SQL DB Engine이다.
보통 스마트폰에 내장되어 활용되고 있다.
DB 파일 생성 방법
- conn = sqlite3.connect(“example.db”) -> 명시한 파일명으로 생성된다.
- conn = sqlite3.connect(“:memory:”) -> 휘발성으로 생성된다. -> 테스트용으로 적합하다.
DB 사용 대표 명령어
종류 | 설명 |
cursor() | sql 문 처리를 위한 객체 생성 |
execute() | 쿼리문을 실행시킬 때 사용하는 함수 |
fetchone() | 한 개의 레코드만 읽어올때 사용하는 함수 |
fetchall() | 모든 레코들 읽어올 때 사용하는 함수 |
Python은 DB 연동 시, 자바와는 달리 커서의 이동을 해주지 않아도 자동으로 이동한다.
Python과 SQLite의 자료형 비교
Python | SQLite |
None | NULL |
int | INTEGER |
float | REAL |
str | TEXT |
byte | BLOB |
SQLite 기본 연습
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#SQLite.py
# 개인용 DBMS - SQLite3
import sqlite3
print(sqlite3.sqlite_version)
print()
conn = sqlite3.connect("example.db") #파일로 생성된다.
#conn = sqlite3.connect(":memory:") #휘발성으로 생성된다.
try:
cur = conn.cursor() #sql문 처리를 위한 객체를 생성
cur.execute("create table if not exists friend(name text, phone text, addr text)")
cur.execute("insert into friend values('한국인', '111-1111', '역삼동')")
cur.execute("insert into friend values('고길동', '222-2222', '강남역 11번출구 앞')")
cur.execute("insert into friend values(?,?,?)", ('나길동', '333-3333', '강남역 10번출구 계단'))
mydata = ('심길동', '444-4444', '강남대로 한복판')
cur.execute("insert into friend values(?,?,?)", mydata)
conn.commit()
#select
cur.execute("select * from friend")
print(cur.fetchone()) #한 개의 레코드 읽기
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
'''
('한국인', '111-1111', '역삼동')
('고길동', '222-2222', '강남역 11번출구 앞')
('나길동', '333-3333', '강남역 10번출구 계단')
('심길동', '444-4444', '강남대로 한복판')
('한국인', '111-1111', '역삼동')
('고길동', '222-2222', '강남역 11번출구 앞')
('나길동', '333-3333', '강남역 10번출구 계단')
'''
print(cur.fetchall()) #전체 레코드 읽기
'''
[('한국인', '111-1111', '역삼동'),
('고길동', '222-2222', '강남역 11번출구 앞'),
('나길동', '333-3333', '강남역 10번출구 계단'),
('심길동', '444-4444', '강남대로 한복판')]
'''
#이름 오름차순으로 자료 출력
cur.execute("select name, addr, phone from friend order by name asc")
for r in cur:
print(r)
'''
('고길동', '222-2222', '강남역 11번출구 앞')
('나길동', '333-3333', '강남역 10번출구 계단')
('심길동', '444-4444', '강남대로 한복판')
('한국인', '111-1111', '역삼동')
'''
except Exception as e:
print("err: "+str(e))
conn.rollback()
finally:
conn.close()
SQLite CRUD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#SQLite_CRUD.py
import sqlite3
def dbFunc(dbName):
try:
conn = sqlite3.connect(dbName)
c = conn.cursor()
c.execute("drop table if exists jikwons")
c.execute("create table if not exists jikwons(id integer primary key, name text)")
#insert
c.execute("insert into jikwons values(1, '가나다')")
t_data = (2, "신기해") #tuple data
c.execute("insert into jikwons values(?,?)", t_data)
t_data2 = 3, "신선해" #tuple data : 괄호 없이 줘도 튜플이다.
c.execute("insert into jikwons values(?,?)", t_data2)
t_data3 = ((4, "신기루"), (5, "신라면"))
c.executemany("insert into jikwons values(?,?)", t_data3)
l_data = [6, "공기밥"] #list data
c.execute("insert into jikwons values(?,?)", l_data)
d_data = {"id": 7, "name":"고래밥"} #dict data : key에 의한 매핑
c.execute("insert into jikwons values(:id, :name)", d_data)
d_data2 = {"sabun": 8, "irum":"주먹밥"} #dict data
c.execute("insert into jikwons values(:sabun, :irum)", d_data2)
#updata
up_data = ("박치기", 7) # ["박치기", 7] -> 이렇게도 가능하다.
c.execute("update jikwons set name=? where id=?", up_data)
#delete
del_data = (4,) #(4) -> 4 와 같다.
c.execute("delete from jikwons where id=?", del_data)
conn.commit()
#select
print("출력1")
c.execute("select * from jikwons")
for r in c:
print(str(r[0])+" "+r[1])
'''
출력1
1 가나다
2 신기해
3 신선해
5 신라면
6 공기밥
7 박치기
8 주먹밥
'''
print("출력2 : 부분자료")
#c.execute("select * from jikwons where id <= 2")
c.execute("select * from jikwons where name= '%s' " %'신기해')
for r in c.fetchall():
print(str(r[0])+" "+r[1])
'''
출력2 : 부분자료
2 신기해
'''
print("출력3 : 함수 사용")
c.execute("select count(*) from jikwons")
print("건 수: "+str(c.fetchone()[0]))
'''
출력3 : 함수 사용
건 수: 7
'''
except Exception as e:
print("err: "+str(e))
conn.rollback()
finally:
conn.close()
if __name__ == '__main__':
dbFunc("test.db")
Python MariaDB 연동하기
- 다운로드링크에서 mysqlclient-1.4.2-cp37-cp37m-win_amd64.whl 파일 다운로드
- cmd 창에서 pip install mysqlclient-1.4.2-cp37-cp37m-win_amd64.whl 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#MariaDB.py
import MySQLdb
config = {
'host':'127.0.0.1',
'user':'root',
'password':'123',
'database':'test',
'port':3306,
'charset':'utf8',
'use_unicode':True
}
#################################################
while(True):
print("*********************************")
print("1. 상품등록 / 2. 상품검색")
menu=int(input("무엇을 하시겠습니까?"))
if menu == 1:
data=[]
data.append(str(input("상품명을 입력하세요:")))
data.append(int(input("수량을 입력하세요:")))
data.append(int(input("단가를 입력하세요:")))
print(data)
isUpdate=str(input("상품을 등록하시겠습니까? (Y/N)"))
if isUpdate == "Y" or isUpdate == "y":
try:
conn = MySQLdb.connect(**config)
cursor = conn.cursor()
#max(c0de) 가져오기
sql = "select 'max(code)' from sangdata"
code = int(cursor.execute(sql))+1
#insert
sql = "insert into sangdata values(%s, %s, %s, %s)"
sql_data = code, data[0], data[1], data[2]
cursor.execute(sql, sql_data)
conn.commit()
#select
sql = "select * from sangdata"
sql2 = "select count(code) from sangdata"
cursor.execute(sql)
for (code, sang, su, dan) in cursor:
print(code, sang, su, dan)
count=cursor.execute(sql2)
print("건 수: ", count)
except Exception as e:
print("err: "+str(e))
conn.rollback()
finally:
cursor.close()
conn.close()
else:
print("프로그램을 종료합니다.")
break
elif menu == 2:
try:
conn = MySQLdb.connect(**config)
cursor = conn.cursor()
#select
sql = "select * from sangdata"
sql2 = "select 'count(code)' from sangdata"
cursor.execute(sql)
for (code, sang, su, dan) in cursor:
print(code, sang, su, dan)
count=cursor.execute(sql2)
print("건 수: ", count)
except Exception as e:
print("err: "+str(e))
conn.rollback()
finally:
cursor.close()
conn.close()
else:
print("1. 상품등록 / 2. 상품검색 중 선택하세요.")
continue
결과화면
실제 DB 결과
참조:원본코드
코드에 문제가 있거나 궁금한 점이 있으면 wjddyd66@naver.com으로 Mail을 남겨주세요.
Leave a comment