Notice
Recent Posts
Recent Comments
Link
160x600
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- sql
- 데이터 분석
- tensorflow
- Database
- Deep Learning
- DB
- 데이터
- 데이터 수집
- python기초
- pythone
- 시각화
- MariaDB
- 머신러닝
- 데이터베이스
- python
- 해석
- 예측
- HeidiSQL
- 파싱 오류
- keras
- pandas
- 데이터 가공
- 정확도
- 딥러닝
- 회귀모델
- 데이터전처리
- sklearn
- Oracle
- 오라클
- 훈련
Archives
- Today
- Total
코딩헤딩
Django 데이터베이스 연결/ 입력/ 조회/ 수정/ 삭제 본문
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