Python (38)

반응형

 

DAO를 이용한 출력

 

DB에서 값을 가져와서 출력

 

 

 

  • 전체 출력

daoemp.py

=> dao 역할을 함

import pymysql

class Daoemp:
    def __init__(self):
        self.con = pymysql.connect(host='localhost', port=3305, user='root',
                              password='python', db='python', charset='utf8')

        self.cur = self.con.cursor(pymysql.cursors.DictCursor)
    
    def selectList(self):
        sql = f"""
            SELECT
                e_id,
                e_name,
                gen,
                addr
            FROM
                emp
        """
        self.cur.execute(sql)
        list = self.cur.fetchall()
        return list

    def __del__(self):
        self.cur.close()
        self.con.close()
        
if __name__ == '__main__':
    de = Daoemp()
    list = de.selectList()
    print("list",list)

 

결과 화면1

 

 

 

  • 한 줄 출력
import pymysql

class Daoemp:
    def __init__(self):
        self.con = pymysql.connect(host='localhost', port=3305, user='root',
                              password='python', db='python', charset='utf8')

        self.cur = self.con.cursor(pymysql.cursors.DictCursor)
    
    def selectList(self):
        sql = f"""
            SELECT
                e_id,
                e_name,
                gen,
                addr
            FROM
                emp
        """
        self.cur.execute(sql)
        list = self.cur.fetchall()
        return list
    
    def select(self,e_id):
        sql = f"""
            SELECT
                e_id,
                e_name,
                gen,
                addr
            FROM
                emp
            WHERE
                e_id = '{e_id}'
        """
        self.cur.execute(sql)
        list = self.cur.fetchall()
        # return list
        return list[0] #vo 방식으로 리턴해주기에 권장함


    def __del__(self):
        self.cur.close()
        self.con.close()
        
if __name__ == '__main__':
    de = Daoemp()
    vo = de.select('1')
    print("vo",vo)

 

결과 화면2 : return list로 사용할때

 

결과 화면3 :  return list[0]으로 사용할때

 

 

+ fetchone() 으로 사용할때 (한 줄만 출력할 때 권장!!)

import pymysql

class Daoemp:
    def __init__(self):
        self.con = pymysql.connect(host='localhost', port=3305, user='root',
                              password='python', db='python', charset='utf8')

        self.cur = self.con.cursor(pymysql.cursors.DictCursor)
    
    def select(self,e_id):
        sql = f"""
            SELECT
                e_id,
                e_name,
                gen,
                addr
            FROM
                emp
            WHERE
                e_id = '{e_id}'
        """
        self.cur.execute(sql)
        list = self.cur.fetchone()
        return list


    def __del__(self):
        self.cur.close()
        self.con.close()
        
if __name__ == '__main__':
    de = Daoemp()
    vo = de.select('1')
    print("vo",vo)

 

결과 화면4

 

 

 

DAO를 이용한 삽입

 

 

import pymysql

class Daoemp:
    def __init__(self):
        self.con = pymysql.connect(host='localhost', port=3305, user='root',
                              password='python', db='python', charset='utf8')

        self.cur = self.con.cursor(pymysql.cursors.DictCursor)
    
    def insert(self,e_id,e_name,gen,addr):
        sql = f"""
            INSERT INTO 
                emp (e_id, e_name, gen, addr)
            VALUES ('{e_id}','{e_name}','{gen}','{addr}')
        """
        cnt = self.cur.execute(sql)
        self.con.commit() #꼭 해야함
        return cnt

    def __del__(self):
        self.cur.close()
        self.con.close()
        
if __name__ == '__main__':
    de = Daoemp()
    cnt = de.insert('3','3','3','3')
    print("cnt",cnt)

 

결과 화면5

 

변경된 것 확인

 

 

 

DAO를 이용한 업데이트

 

 

import pymysql

class Daoemp:
    def __init__(self):
        self.con = pymysql.connect(host='localhost', port=3305, user='root',
                              password='python', db='python', charset='utf8')

        self.cur = self.con.cursor(pymysql.cursors.DictCursor)

    def update(self,e_id,e_name,gen,addr):
        sql = f"""
            UPDATE emp 
            SET
                e_name = '{e_name}',
                gen = '{gen}',
                addr = '{addr}'
            WHERE
                e_id = '{e_id}'
        """
        cnt = self.cur.execute(sql)
        self.con.commit() #꼭 해야함
        return cnt

    def __del__(self):
        self.cur.close()
        self.con.close()
        
if __name__ == '__main__':
    de = Daoemp()
    cnt = de.update('3','6','6','6')
    print("cnt",cnt)

 

결과 화면6

 

변경된 것 확인

 

 

 

DAO를 이용한 삭제

 

 

import pymysql

class Daoemp:
    def __init__(self):
        self.con = pymysql.connect(host='localhost', port=3305, user='root',
                              password='python', db='python', charset='utf8')

        self.cur = self.con.cursor(pymysql.cursors.DictCursor)

    def delete(self,e_id):
        sql = f"""
            DELETE FROM emp 
            WHERE
                e_id = '{e_id}'
        """
        cnt = self.cur.execute(sql)
        self.con.commit() #꼭 해야함
        return cnt

    def __del__(self):
        self.cur.close()
        self.con.close()
        
if __name__ == '__main__':
    de = Daoemp()
    cnt = de.delete('3')
    print("cnt",cnt)

 

결과 화면7

 

변경된 것 확인

 

 

 

응용

 

 

daoemp.py

import pymysql

class Daoemp:
    def __init__(self):
        self.con = pymysql.connect(host='localhost', port=3305, user='root',
                              password='python', db='python', charset='utf8')

        self.cur = self.con.cursor(pymysql.cursors.DictCursor)
    
    def selectList(self):
        sql = f"""
            SELECT
                e_id,
                e_name,
                gen,
                addr
            FROM
                emp
        """
        self.cur.execute(sql)
        list = self.cur.fetchall()
        return list
    
    def select(self,e_id):
        sql = f"""
            SELECT
                e_id,
                e_name,
                gen,
                addr
            FROM
                emp
            WHERE
                e_id = '{e_id}'
        """
        self.cur.execute(sql)
        # list = self.cur.fetchall()
        list = self.cur.fetchone()
        return list
        # return list[0] #vo 방식으로 리턴해주기에 권장함

    def insert(self,e_id,e_name,gen,addr):
        sql = f"""
            INSERT INTO 
                emp (e_id, e_name, gen, addr)
            VALUES ('{e_id}','{e_name}','{gen}','{addr}')
        """
        cnt = self.cur.execute(sql)
        self.con.commit() #꼭 해야함
        return cnt
        
    def update(self,e_id,e_name,gen,addr):
        sql = f"""
            UPDATE emp 
            SET
                e_name = '{e_name}',
                gen = '{gen}',
                addr = '{addr}'
            WHERE
                e_id = '{e_id}'
        """
        cnt = self.cur.execute(sql)
        self.con.commit() #꼭 해야함
        return cnt
        
    def delete(self,e_id):
        sql = f"""
            DELETE FROM emp 
            WHERE
                e_id = '{e_id}'
        """
        cnt = self.cur.execute(sql)
        self.con.commit() #꼭 해야함
        return cnt

    def __del__(self):
        self.cur.close()
        self.con.close()
        
if __name__ == '__main__':
    de = Daoemp()
    cnt = de.delete('3')
    print("cnt",cnt)

 

 

my_flask.py

from flask import Flask,request,render_template
from day08.daoemp import Daoemp

app = Flask(__name__)

@app.route('/')
@app.route('/emp_list')
def emp_list():
    de = Daoemp()
    list = de.selectList()
    return render_template("emp_list.html", list=list)

if __name__ == '__main__':
     app.run(debug=True, port=80, host='0.0.0.0')

 

 

emp_list.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table {
  margin: 10px 10px 10px 0px;
  width: 30%;
}
</style>
<script type="text/javascript">
function fn_add() {
	location.href = "emp_add";
}
</script>
</head>
<body>
	EMPLIST HTML <br>
	
	<table border=1>
		<tr>
			<th> 사번 </th>
			<th> 이름 </th>
			<th> 성별 </th>
			<th> 주소 </th>
		</tr>
		{% for e in list %}
		<tr>
			<td><a href="emp_detail?e_id={{ e.e_id }}"> {{ e['e_id'] }} </a></td>
			<td> {{ e.e_name }} </td>
			<td> {{ e.gen }} </td>
			<td> {{ e.addr }} </td>
		</tr>
		{% endfor %}
	</table>
	
	<input type="button" value="추가" onclick="fn_add()">
</body>
</html>

 

 

emp_detail.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table {
  margin: 10px 10px 10px 0px;
}
td {
  width: 50%;
}
</style>
<script type="text/javascript">
function fn_mod() {
	location.href = "emp_mod?e_id={{ vo.e_id }}";
}

function fn_del() {
	var flag = confirm("한 번 지워진 데이터는 복구불가합니다.\n 그래도 삭제하시겠습니까?");
	if(!flag) {
		return;
	}
	document.frm.submit();
}
</script>
</head>
<body>
	EMP DETAIL <br>
	
	<form name="frm" action="emp_del" method="post">
		<input type="hidden" name="e_id" value="{{ vo.e_id }}">
		<table border=1>
			<tr>
				<th> 사번 </th>
				<td> {{ vo.e_id }} </td>
			</tr>
			<tr>
				<th> 이름 </th>
				<td> {{ vo.e_name }} </td>
			</tr>
			<tr>
				<th> 성별 </th>
				<td> {{ vo.gen }} </td>
			</tr>
			<tr>
				<th> 주소 </th>
				<td> {{ vo.addr }} </td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="button" onclick="fn_mod()" value="수정">
					<input type="button" onclick="fn_del()" value="삭제">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

 

 

emp_mod.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table {
  margin: 10px 10px 10px 0px;
}
</style>
<script type="text/javascript">
function fn_mod_act() {
	document.frm.submit();
}
</script>
</head>
<body>
	EMP MOD<br>
	<form name="frm" action="emp_mod_act" method="post">
		<table border=1>
			<tr>
				<th> 사번 </th>
				<td> <input type="text" value="{{ vo.e_id }}" name="e_id"> </td>
			</tr>
			<tr>
				<th> 이름 </th>
				<td> <input type="text" value="{{ vo.e_name }}" name="e_name"> </td>
			</tr>
			<tr>
				<th> 성별 </th>
				<td> <input type="text" value="{{ vo.gen }}" name="gen"> </td>
			</tr>
			<tr>
				<th> 주소 </th>
				<td> <input type="text" value="{{ vo.addr }}" name="addr"> </td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="button" onclick="fn_mod_act()" value="저장">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

 

 

emp_mod_act.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
	var cnt = {{cnt}}; /* 에러처럼 보이지만 에러가 아님 */
	if(cnt > 0) {
		alert("정상적으로 수정되었습니다.");
		location.href = "emp_list";
	} else {
		/* location.href 를 사용하면 안 됨 */
		alert("수정도중 문제가 생겼습니다.");
		history.back();
	}
	
</script>
<body>
EMP MOD ACT HTML <br>

{{ cnt }}
</body>
</html>

 

 

emp_add.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function fn_add_act() {
	document.frm.submit();
}
</script>
</head>
<body>
	EMP ADD HTML <br>

	<form name="frm" action="emp_add_act" method="post">
		<table border=1>
			<tr>
				<th> 사번 </th>
				<td> <input type="text" name="e_id"> </td>
			</tr>
			<tr>
				<th> 이름 </th>
				<td> <input type="text" name="e_name"> </td>
			</tr>
			<tr>
				<th> 성별 </th>
				<td> <input type="text" name="gen"> </td>
			</tr>
			<tr>
				<th> 주소 </th>
				<td> <input type="text" name="addr"> </td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="button" onclick="fn_add_act()" value="저장">
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

 

 

emp_add_act.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	var cnt = {{cnt}};
	if(cnt > 0) {
		alert("정상적으로 저장되었습니다.")
		location.href = "emp_list";
	} else {
		alert("저장도중 문제가 생겼습니다.");
		history.back();
	}
</script>
</head>
<body>
	EMP ADD ACT <br>
	{{cnt}}
</body>
</html>

 

 

emp_list.html 화면

 

emp_detail.html 화면

 

emp_mod.html 화면

 

emp_mod_act.html 화면 : 정상 수정

 

emp_mod_act.html 화면 : 수정 오류

 

emp_add.html 화면

 

emp_add_act.html 화면

 

emp_del.html 화면1

 

emp_del.html 화면2

 

 

반응형
반응형

 

파라미터 받기

 

 

from flask import Flask,request

app = Flask(__name__)

@app.route('/')
def hello():
   return 'Hello World'

if __name__ == '__main__':
  app.run(debug=True, port=80, host='0.0.0.0')

 

결과 화면1

 

 

 

  • get 방식
from flask import Flask,request

app = Flask(__name__)

@app.route('/param')
def param():
   menu = request.args.get('menu', "탕수육")
   return 'PARAM:'+menu

if __name__ == '__main__':
  app.run(debug=True, port=80, host='0.0.0.0')

 

 

결과 화면2

 

 

 

  • post 방식 (get 포함)

form.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="http://localhost/post" method="post">
	<input type="text" name="menu" value="짜장면">
	<input type="submit">
</form>
</body>
</html>

 

 

my_flask.py

from flask import Flask,request

app = Flask(__name__)

@app.route('/post', methods=['POST','GET'])
def post():
   menu = request.form['menu']
   return 'POST:'+menu

if __name__ == '__main__':
  app.run(debug=True, port=80, host='0.0.0.0')

 

 

결과 화면3-1

 

결과 화면3-2 : 제출 클릭 시

 

 

flask는 java와 달리 html을 동적인 것으로 여겨 사용한다.

 

 

+ forward와 redirect 

forward : url이 안 바뀜

redirect : url이 바뀜 

 

 

 

html 연결

 

 

from flask import Flask,request,render_template

app = Flask(__name__)

@app.route('/forw')
def forw():
   return render_template('forw.html')

if __name__ == '__main__':
  app.run(debug=True, port=80, host='0.0.0.0')

 

결과 화면4

 

 

html 파일이 templates 폴더 안에 없으면 오류 발생!!

 

 

 

  • HTML로 값 전달

my_flask.py

from flask import Flask,request,render_template

app = Flask(__name__)

@app.route('/forw')
def forw():
   a = "홍길동"
   b = ["전우치","장화홍련"]
   return render_template('forw.html', a=a, b=b)

if __name__ == '__main__':
  app.run(debug=True, port=80, host='0.0.0.0')

 

 

forw.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
FORW HTML <br>
{{a}} <br>
{{b}} <br>
</body>
</html>

 

결과 화면5

 

 

=> 배열의 경우 for를 사용하여 하나하나 출력

 

 

 

  • HTML로 값 전달 (배열)

 

my_flask.py

from flask import Flask,request,render_template

app = Flask(__name__)

@app.route('/forw')
def forw():
   a = "홍길동"
   b = ["전우치","장화홍련"]
   return render_template('forw.html', a=a, b=b)

if __name__ == '__main__':
  app.run(debug=True, port=80, host='0.0.0.0')

 

 

forw.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
FORW HTML <br>
{{a}} <br>
{% for i in b %}
	{{i}}<br>
{% endfor %}
</body>
</html>

 

결과 화면6

 

 

 

  • 배열로 받은 값을 테이블로 가져오기

my_flask.py

from flask import Flask,request,render_template

app = Flask(__name__)

@app.route('/emp')
def emp():
    mylist = [
        {'e_id':'1','e_name':'1','gen':'1','addr':'1'},
        {'e_id':'2','e_name':'2','gen':'2','addr':'2'},
        {'e_id':'3','e_name':'3','gen':'3','addr':'3'}
    ]
    return render_template('emp.html', mylist=mylist)

if __name__ == '__main__':
  app.run(debug=True, port=80, host='0.0.0.0')

 

 

emp.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	EMP HTML

	<table border = 1>
		<tr>
			<th> 아이디 </th>
			<th> 이름 </th>
			<th> 성별 </th>
			<th> 주소 </th>
		</tr>
		{% for key in mylist %}
		<tr>
			<td> {{ key['e_id'] }} </td>
			<td> {{ key.e_name }} </td>
			<td> {{ key['gen'] }} </td>
			<td> {{ key['addr'] }} </td>
		</tr>
		{% endfor %}
	</table>
</body>
</html>

 

7

 

 

반응형
반응형

 

프로젝트 설정

 

 

1

 

1. New > Other 클릭 > web 검색 > Dynamic Web Project 클릭 > Next 클릭

 

2

 

2. 이름 기입 > New Runtime 클릭

 

3

 

3. Apache Tomcat v8.5 클릭 > Next 클릭

 

4

 

4. Browse 클릭 > apache 폴더까지 와서 폴더 선택

 

5

 

5. Installed JREs 클릭 > Add 클릭

 

6

 

6. Standard VM 클릭 > Next 클릭

 

7

 

7. Directory 클릭 > JDK 위치 클릭 > 폴더 선택 클릭 > Finish 클릭

 

8

 

8. 기존 JDK 삭제 > JDK 선택 > Apply and Close 클릭

 

9

 

9. JDK 1.8 클릭 > Finish 클릭

 

10

 

10. Next 클릭

 

11

 

11. 체크박스 클릭 > Finish 클릭

 

 

 

패키지 설정

 

 

1

 

1. Window > Show View > Other 클릭

 

2

 

2. pa 검색 > Package Explorer 클릭 > Open 클릭

 

추가된 것 확인

 

 

 

파일 생성

 

 

1

 

1. servl 검색 > Servlet 클릭 > Next 클릭

 

2

 

2. Class name 입력 > Next 클릭

 

3

 

3. 전부 소문자로 수정 > OK 클릭

 

4

 

4. Next 클릭

 

5

 

5. Finish 클릭

 

6

 

6. Ctrl + F11 > 서버 선택 > Finish 클릭

 

실행 화면 확인

 

 

=> 사용한 코드

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
   return 'Hello World'

if __name__ == '__main__':
  app.run(debug=True, port=80, host='0.0.0.0')

 

 

 

jdk 버전에 달라 안 맞을 때

 

1

 

1. 프로젝트 에서 오른쪽 마우스 클릭 > Properties 클릭

 

2

 

2. Java Build Path 클릭 > Libraries 클릭 > JRE 클릭 > Edit 클릭

 

3

 

3. Alternate JRE 클릭 > JDK 1.8로 설정 > Finish 클릭 > Apply 클릭

 

4

 

4. Java Compiler 클릭 > Compiler compliance level 의 1.8 설정 > Apply and Close 클릭

 

 

반응형
1 ··· 4 5 6 7 8 9 10 ··· 13