데이터베이스 소프트웨어=DBMS

DBMS에는 계층형, 망형, 관계형, 객체지향형, 객체관계형 등으로 나눈다.

그중 가장 많이 사용하는 건 관계형 DBMS(=RDBMS)
속도가 느리다는 단점이 있기는 하지만 요즘 기술이 발달해 예전보다는 많이 나아짐

DBMS-DB-TABLE-ROW&COLUMN





selfstudy13-1.py

 
.open 데이터베이스 이름
-데이터베이스 생성 또는 열기(있으면 열고 없으면 생성)
 
create table 테이블 이름(열이름1 데이터형식, 열이름2 데이터형식.....)
-테이블 생성
 
insert into 테이블 이름 values(값1, 값2...)
-데이터 입력
 
select * from 테이블이름
-데이터 조회
 
 +추가
.header: 현재 db의 테이블 목록을 보여준다.
.schema 테이블이름: 테이블의 열 및 데이터 형식 등 정보를 보여준다
.header on. 조회시 헤더를 보여준다
mode column: 조회시 컬럼 모드로 출력한다
.quit: 종료
 

데이터베이스 연결을 위한 코드

.connect()
-데이터베이스 연결
 
.cursor()
-커서생서->통로 생성
 
.execute
-명령어 실행(ex. insert.... 또는  select..... 등등)
 
.commit
-저장
 
.fetchnone()
-한 행씩 출력
 
.close
-닫기
 
 
 
Code13-01.py

import sqlite3

##변수 선언 부분##
con, cur = None, None
data1, data2, data3, data4 = "", "", "", ""
sql = ""

##메인코드부분##
con = sqlite3.connect("c:/sqlite/naverDB")
cur = con.cursor()

while(True):
    data1 = input("사용자ID ==> ")
    if data1 == "":
        break
    data2 = input("사용자이름 ==> ")
    data3 = input("이메일 ==> ")
    data4 = input("출생연도 ==> ")
    sql = "INSERT INTO userTable VALUES ('" + data1 + "', '" + data2 + "','" + data3 + "', " + data4 +")" #char같은 문자열은 '를 넣어주고 int 같은 숫자는 그냥 집어 넣는다
    cur.execute(sql)

con.commit()
con.close()

 data1~3은작은따옴표로 묶지만 data4는 정수이므로 묶으면 안된다.
 
selftstudy13-2.py

import sqlite3

# 변수 선언 부분
con, cur = None, None
data1, data2, data3, data4 = "", "", 0, 0  # 데이터 입력 변수 초기화
sql = ""

# 메인 코드 부분
con = sqlite3.connect("c:/sqlite/naverDB")  # 데이터베이스 파일 연결
cur = con.cursor()

# 테이블 생성 (존재하지 않을 경우)
cur.execute("""
    CREATE TABLE IF NOT EXISTS productTable (
        pCode char(5) PRIMARY KEY,
        pName char(3),
        price int,
        amount int
    )
""")

while True:
    data1 = input("제품 코드 ==> ")
    if data1 == "":
        break
    data2 = input("제품 이름 ==> ")
    data3 = input("가격 ==> ")
    data4 = input("재고수량 ==> ")
    
    # SQL문 작성 및 실행
    try:
        sql = "INSERT INTO productTable (pCode, pName, price, amount) VALUES (?, ?, ?, ?)"
        cur.execute(sql, (data1, data2, int(data3), int(data4)))  # 파라미터 바인딩으로 안전하게 값 입력
    except sqlite3.IntegrityError:
        print(f"제품 코드 '{data1}'는 이미 존재합니다. 다른 코드를 사용하세요.")
    except ValueError:
        print("가격과 재고는 숫자로 입력해야 합니다.")
    except Exception as e:
        print(f"오류 발생: {e}")

con.commit()  # 변경 사항 저장
con.close()   # 연결 종료

print("프로그램이 종료되었습니다.")

 
selfstudy13-3.py

import sqlite3

## 변수 선언 부분 ##
con, cur = None, None
data1, data2, data3, data4 = "", "", 0, 0
row = None

## 메인 코드 부분 ##
con = sqlite3.connect("c:/sqlite/naverDB")  # 데이터베이스 연결
cur = con.cursor()

cur.execute("SELECT * FROM productTable")  # productTable 조회
print("제품 코드      제품 이름      가격      재고수량")
print("------------------------------------------------")

while True:
    row = cur.fetchone()
    if row is None:
        break
    data1 = row[0]  # pCode
    data2 = row[1]  # pName
    data3 = row[2]  # price
    data4 = row[3]  # amount
    print("%8s %10s %10d %10d" % (data1, data2, data3, data4))

con.close()  # 데이터베이스 연결 종료

 
Code13-02.py

import sqlite3

##변수 선언 부분##
con, cur = None, None
data1, data2, data3, data4 = "", "", "", ""
row = None

##메인코드부분##
con = sqlite3.connect("c:/sqlite/naverDB")
cur = con.cursor()

cur.execute("SELECT * FROM userTable")
print("사용자ID        사용자이름       이메일    출생연도")
print("--------------------------------------------------------------------")

while(True):
    row = cur.fetchone()
    if row == None:
        break
    data1 = row[0]
    data2 = row[1]
    data3 = row[2]
    data4 = row[3]
    print("%5s %15s %20s %d" %(data1,data2,data3,data4))

con.close()

 
 
Code13-03.py

import sqlite3
from tkinter import *
from tkinter import messagebox

# 데이터 삽입 함수
def insertData():
    con, cur = None, None
    data1, data2, data3, data4 = "", "", "", ""
    sql = ""

    con = sqlite3.connect("c:/sqlite/naverDB")  # DB 경로 설정
    cur = con.cursor()

    data1 = edt1.get()
    data2 = edt2.get()
    data3 = edt3.get()
    data4 = edt4.get()

    try:
        sql = "INSERT INTO userTable VALUES('" + data1 + "', '" + data2 + "', '" + data3 + "', " +data4 + ")"
        cur.execute(sql)
    except:
        messagebox.showerror('오류', '데이터 입력 오류가 발생함')
    else:
        messagebox.showinfo('성공', '데이터 입력 성공')
        con.commit()
        con.close()

# 데이터 조회 함수
def selectData():
    strData1, strData2, strData3, strData4 = [], [], [], []
    con = sqlite3.connect("c:/sqlite/naverDB")  # DB 경로 설정
    cur = con.cursor()
    cur.execute("SELECT * FROM userTable")
    strData1.append("사용자ID")
    strData2.append("사용자이름")
    strData3.append("이메일")
    strData4.append("출생연도")

    strData1.append("--------")
    strData2.append("--------")
    strData3.append("--------")
    strData4.append("--------")

    while True:
        row = cur.fetchone()
        if row is None:
            break
        strData1.append(row[0])
        strData2.append(row[1])
        strData3.append(row[2])
        strData4.append(row[3])

    listData1.delete(0, listData1.size() -1)
    listData2.delete(0, listData2.size() -1)
    listData3.delete(0, listData3.size() -1)
    listData4.delete(0, listData4.size() -1)

    for item1, item2, item3, item4 in zip(strData1, strData2, strData3, strData4):
        listData1.insert(END, item1)
        listData2.insert(END, item2)
        listData3.insert(END, item3)
        listData4.insert(END, item4)

    con.close()

# 메인 코드
window = Tk()
window.geometry("600x300")
window.title("GUI 데이터 입력")

edtFrame = Frame(window)
edtFrame.pack()
listFrame = Frame(window)
listFrame.pack(side=BOTTOM, fill=BOTH, expand=1)

edt1 = Entry(edtFrame, width=10)
edt1.pack(side=LEFT, padx=10, pady=10)
edt2 = Entry(edtFrame, width=10)
edt2.pack(side=LEFT, padx=10, pady=10)
edt3 = Entry(edtFrame, width=10)
edt3.pack(side=LEFT, padx=10, pady=10)
edt4 = Entry(edtFrame, width=10)
edt4.pack(side=LEFT, padx=10, pady=10)

btnInsert = Button(edtFrame, text="입력", command=insertData)
btnInsert.pack(side=LEFT, padx=10, pady=10)
btnSelect = Button(edtFrame, text="조회", command=selectData)
btnSelect.pack(side=LEFT, padx=10, pady=10)

listData1 = Listbox(listFrame, bg='yellow')
listData1.pack(side=LEFT, fill=BOTH, expand=1)
listData2 = Listbox(listFrame, bg='yellow')
listData2.pack(side=LEFT, fill=BOTH, expand=1)
listData3 = Listbox(listFrame, bg='yellow')
listData3.pack(side=LEFT, fill=BOTH, expand=1)
listData4 = Listbox(listFrame, bg='yellow')
listData4.pack(side=LEFT, fill=BOTH, expand=1)

window.mainloop()

'Language > Python' 카테고리의 다른 글

미니프로젝트  (0) 2024.12.06
객체지향 프로그래밍  (1) 2024.12.05
파일 입출력  (0) 2024.12.05
윈도 프로그래밍  (2) 2024.12.05
함수와 모듈  (0) 2024.12.05

+ Recent posts