코딩헤딩

Django 데이터베이스 연결/ 입력/ 조회/ 수정/ 삭제 본문

카테고리 없음

Django 데이터베이스 연결/ 입력/ 조회/ 수정/ 삭제

멈머이 2024. 2. 6. 13:54
728x90
conda install -c conda-forge PyMySQL

 

앱 생성

django-admin startapp mysqlapp

 


mysql app에서 

- 함수명 index()

- HttpResponse("index 페이지입니다.") 출력

- mysqlapp에 urls.py 생성

url패턴 : 127.0.0.1:8080/msql/

 

* view.py

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request) :
    return HttpResponse("index 페이지입니다.")

* urls.py

from django.urls import path

from . import views

urlpatterns = [
    # http://127.0.0.1:8000/mysql/
    path('', views.index),
]

 

* config > settings.py

INSTALLED_APPS = [
    'firstapp',
    'mainapp',
    'mysqlapp',
   
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 

 

model 폴더 생성 후 다음과 같이 파일 생성

 

 

 

 


데이터베이스 처리 순서에 따라
 - DB드라이버 연결
 - DB접속
 - DB로 부터 cursor 받아오기
 - 조회 입력 수정 삭제 sql을 DB서버로 요청및 결과 받아오기
 - DB 자원 반환

 

 

* mysaql.py
### 데이터베이스 처리 순서
# - DB 드라이버 연결
import pymysql

class Mysql_Model :
    ### 생성자
    def __init__(self) :
        # DB 접속정보 정의
        self.initDBInfo()
       
        # DB 접속
        self.DBConnection()
       
        # DB로부터 cursor 받아오기
        self.DBCursor()
       
       
    ### DB 접속정보 정의
    def initDBInfo(self) :
        self.host = "localhost"
        self.user = "gjuser"
        self.password = "dbdb"
        self.db = "gjdb"
        # 문자 인코딩 타입
        self.charset = "utf8"
        # 조회 시 컬럼명을 동시에 보여줄지 여부 설정
        self.cursorclass = pymysql.cursors.DictCursor
        # 입력/수정/삭제 시 DB에 자동 반영 여부
        self.autocommit = True
       
    # - DB 접속
    def DBConnection(self) :
        try :
            self.conn = pymysql.connect(
                            host = self.host,
                            user = self.user,
                            password = self.password,
                            db = self.db,
                            charset = self.charset,
                            cursorclass = self.cursorclass,
                            autocommit = self.autocommit
                        )
            print("DB 접속 성공 --> ", self.conn)
           
        except :
            print("DB 접속 정보 확인이 필요함!!")
           
    # - DB로부터 cursor 받아오기
    def DBCursor(self) :
        self.cur = self.conn.cursor()
   
    # - 조회/입력/수정/삭제 sql을 DB서버로 요청 및 결과받아오기
    # - cart_model.py에서 처리
   
    # - DB 자원 반환
    def DBClose(self) :
        try :
            self.cur.close()
            self.conn.close()
            print("DB 정보 반환 완료....")
        except :
            print("이미 DB 정보가 반환되었습니다.")

 

* cart_model.py

import pymysql
from mysqlapp.model.mysql import Mysql_Model

class Cart :
   
    ### 생성자
    def __init__(self) :
        self.db = Mysql_Model()
       
    ### 장바구니 전체 조회하기
    def getCartList(self) :
        sql = """
              Select cart_member, cart_no
              From cart
              Order By cart_member, cart_no
              """
             
        ### DB에 요청하기 : cursor에 담기
        # 실행 결과의 개수
        rs_cnt = self.db.cur.execute(sql)
       
        # 실행 결과 데이터
        rows = self.db.cur.fetchall()
       
        # db정보 반환
        self.db.DBClose()
       
        return rs_cnt, rows

* member_model.py

import pymysql
from mysqlapp.model.mysql import Mysql_Model

class Member :
   
    ### 생성자
    def __init__(self) :
        self.db = Mysql_Model()
       
    ### 회원 상세 조회하기
    def getMemberView(self, mem_id) :
        sql = f"""
              Select mem_id, mem_name, mem_add1, mem_add2
              From member
              Where mem_id = '{mem_id}'
              """
             
        ### DB에 요청하기 : cursor에 담기
        # 실행 결과의 개수
        rs_cnt = self.db.cur.execute(sql)
       
        # 실행 결과 데이터
        # - {'컬럼명' : 값,'컬럼명' : 값,... }
        row = self.db.cur.fetchone()
       
        # db정보 반환
        self.db.DBClose()
       
        return rs_cnt, row

 

* cart_list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script>
        function goView(cart_member){
            // alert(cart_member);
            url = "/mysql/mem_view/";
            url += "?mem_id=" + cart_member;
            // alert(url);
            location.href = url;
        }
    </script>

</head>
<body>
    <h2>장바구니 전체 목록 조회하기</h2>
    <h5>조회건수 : {{cart_cnt}}</h5>
    <table border="1">
        <tr>
            <th>화원아이디</th>
            <th>주문번호</th>
        </tr>
        {% for data in cart_list %}
        <tr>
            <td><a href="javascript:goView('{{ data.cart_member }}');">{{ data.cart_member }}</a></td>
            <td>{{ data.cart_no }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

 

 

 

 

 

 

 

회원아이디를 누르고 들어가면 아래 회원 상세보기를 볼 수 있다.

 

 

 

 

 

 

* mem_view.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>회원상세 조회하기</h2>
    <table border="1">
        <tr>
            <th>회원아이디</th>
            <td>{{ mem_view.mem_id }}</td>
        </tr>
        <tr>
            <th>회원이름</th>
            <td>{{ mem_view.mem_name }}</td>
        </tr>
        <tr>
            <th>회원주소</th>
            <td>{{ mem_view.mem_add1 }} {{ mem_view.mem_add2 }}</td>
        </tr>
    </table>
</body>
</html>

 

* views.py

from django.shortcuts import render
from django.http import HttpResponse

from mysqlapp.model.cart_model import Cart
from mysqlapp.model.member_model import Member

# Create your views here.
def index(request) :
    return HttpResponse("index 페이지입니다.")
    
    
    
# 데이터 여러건 조회하기
# 장바구니 리스트 조회하기    
# /mysql/cart_list/
def cart_list(request) :
    ### model(DB) 처리
    # Cartclass 생성
    cart = Cart()
    
    ### 장바구니 전체 정보 조회하기
    # - cart_cnt : 정수값을 반환받은
    # - cart_list : [{'컬럼명' : 값, '컬럼명' : 값, .....}]
    cart_cnt, cart_list = cart.getCartList()
    
    ### 반환
    return render(
        request,
        "mysqlapp/cart/cart_list.html",
        {"cart_cnt" : cart_cnt,
         "cart_list" : cart_list}
    )
    
def mem_view(request) :
    ### 요청 파라미터 받기 : request가 가지고 있다.
    if request.method == "POST" :
        mem_id = request.POST.get("mem_id", "none")
        
    elif request.method == "GET" :
        mem_id = request.GET.get("mem_id", "none")
        
        # DB조회
        member = Member()
        rs_cnt, mem_view = member.getMemberView(mem_id)
        
    return render(
                request,
                "mysqlapp/member/mem_view.html",
                {"mem_view" : mem_view}    
            )

 

*urls.py

from django.urls import path

from . import views

urlpatterns = [
    # http://127.0.0.1:8000/mysql/
    path('', views.index),
    
    # http://127.0.0.1:8000/mysql/cart_list/
    path('cart_list/', views.cart_list),
    
    # http://127.0.0.1:8000/mysql/mem_view/
    path('mem_view/', views.mem_view),
]

 

728x90