Python (38)

반응형

 

과거의 파일 이용하여 수정하기

 

=> 포트 번호만 수정함

 

 

daoemp.py

import pymysql

class Daoemp:
    def __init__(self):
        self.con = pymysql.connect(host='localhost', port=3306, 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)

결과 화면1

 

 

 

+도커 파일

 

 

 

도커 테스트

 

 

docker build -t my-mysql-image .
docker run -d --name my-mysql-container -p 3306:3306 my-mysql-image



docker pull mysql
docker images
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=python -d -p 3306:3306 mysql:latest

 

 

1

 

1. docker_mysql 폴더 오른쪽 마우스 클릭 > Properties 클릭

 

2

 

2. 주소 복사하기

 

3

 

3. cmd 창에서 cd 위치 붙여넣기 > 위의 코드 붙여넣기

 

4

 

4. Docker 실행하여 images 에서 추가된 것 확인

 

 

+ img 확인 방법

상단의 코드 입력

 

 

 

  • 실행 방법
docker run -d -p 5000:5000 flask-app

 

1

 

1. cmd 창에서 위의 코드 입력

 

파일 경로 확인

 

2. 파일 생성

 

Dockerfile

FROM python:3.8-alpine
COPY . /app
WORKDIR /app
RUN pip3 install flask
RUN chmod +x /app/my_flask.py
CMD ["python3", "my_flask.py"]

 

 

my_flask.py

from flask import Flask,request,render_template, redirect, jsonify
from flask.helpers import make_response

app = Flask(__name__)

@app.route('/')
def main():
   return 'Hello Docker'

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

 

3

 

3. 127.0.0.1:5000번으로 진행

 

 

 

MVVM 이용하여 실행하기 (Docker 연결 x)

 

 

 

  • 필수!!

위의 폴더에서 있는 daoemp 파일 열기 > host에 자신의 host 번호 입력 (localhost 입력 시 불가능!)

 

 

 

  • 실행 (마리아DB 사용)

1. 폴더 위치로 cmd 이동

 

2

 

2. 아래 코드 차례대로 cmd에 입력

 

docker build -t flask-app .
docker run -d --name flask-app-container -p 5000:5000  -p 3305:3305 flask-app

 

3

 

3. 크롬 창에 127.0.0.1:5000 입력

 

 

 

MVVM 이용하여 실행하기 (Docker 연결 o)

 

 

  • 실행 (마리아DB 사용)

과거 만들어 놓은 도커 파일을 이용한다.

 

+도커 파일 내용 확인

더보기
# Dockerfile

# MySQL 이미지를 기반으로 이미지 생성
FROM mysql:latest

# MySQL 설정
ENV MYSQL_ROOT_PASSWORD=python
#ENV MYSQL_DATABASE=mysql
#ENV MYSQL_USER=root
#ENV MYSQL_PASSWORD=python

# 포트 설정 (기본 MySQL 포트는 3306)
EXPOSE 3306

 

 

 

1. docker_mysql의 폴더 위치로 cmd 이동

 

docker build -t my-mysql-image .
docker run -d --name my-mysql-container -p 3306:3306 my-mysql-image

 

2. cmd 창에 위의 코드 입력

 

3

 

3. Containers에서 실행되는 것들 확인

 

4

 

4. HeidiSQL에서 데이터 베이스 python 생성 > emp 테이블 생성 > 열 추가 > 저장

 

5

 

5. 데이터 삽입

 

4

 

4. localhost:5000 실행하여 결과 확인

 

 

반응형
반응형

 

가상머신과 도커 비교

 

 

 

도커는 가볍고 속도도 괜찮기에 사용하기 좋음

 

 

 

설치 전 설정

 

1

 

1. 제어판 > 프로그램 클릭

 

2

 

2. 프로그램 및 기능 클릭

 

3

 

3. Windows 기능 켜기/끄기 클릭

 

4

 

4. Hyper-V 선택 > 확인 클릭

 

5

 

5. 다시 시작 클릭

 

6. WSL 및 Docker 다운로드 하기

 

 

 

Docker 설치

 

 

1

 

1. 더블 클릭 > OK로 설치

 

2

 

2. Close and restart 클릭

 

3

 

3. Accept 클릭

 

4

 

4. 클릭 후 Finish 클릭

 

5

 

5. Sign in 클릭

 

6

 

6. docker 로그인 또는 회원가입

 

로그인 화면

 

 

cmd창에서 docker -v로 설치된 것 확인

 

 

7

 

7. cmd 창에서 docker pull mysql 입력

 

 

 

WSL 설치

 

 

1

 

1. 더블 클릭

 

2

 

2. Next 클릭

 

3

 

3. Finish 클릭

 

 

 

mysql 설치

 

 

1

 

1. 아래의 코드 입력

 

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=python -d -p 3306:3306 mysql:latest

 

 

2

 

2. 추가된 것을 확인

 

3

 

3. 실행

 

4

 

4. 세션 신규로 추가 > 위에 기입한 비밀번호(python) 입력  > 저장 > 열기

 

열린 것 확인

 

 

 

데이터베이스 생성 및 테이블 생성

 

 

1

 

1. 오른쪽 마우스 클릭 > 새로 생성 클릭 > 데이터베이스 클릭

 

2

 

2. 이름 기입 > 조합 선택 > 확인

 

3

 

3. 데이터 베이스에서 오른쪽 마우스 클릭 > 새로 생성 > 테이블 클릭

 

4

 

4. 테이블 생성

 

5

 

5. 데이터 기입

 

 

반응형
반응형

 

axios를 이용한 동기(sync)와 비동기(async)

 

 

  • 기본

my_flask.py

from flask import Flask,request,render_template, redirect, jsonify
from flask.helpers import make_response
from Cython.Compiler.Errors import message
from day12.daoemp import Daoemp

app = Flask(__name__)

@app.route('/')
def main():
   return redirect("static/async.html")


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

 

 

async.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script type="text/javascript">
function fn_sync(){
	var a = 1;
	var b = 2;
	var sum = a+b;
	
	console.log("sum",sum);
}
</script>
</head>
<body> 
ASYNC<br>
<a href="javascript:fn_sync()">sync</a><br>

</body>
</html>

 

결과 화면1

 

 

 

  • async

my_flask.py

from flask import Flask,request,render_template, redirect, jsonify
from flask.helpers import make_response
from Cython.Compiler.Errors import message
from day12.daoemp import Daoemp

app = Flask(__name__)

@app.route('/')
def main():
   return redirect("static/async.html")

@app.route('/get1', methods=['POST'])
def get1():
    return jsonify(num = 1)

@app.route('/get2', methods=['POST'])
def get2():
    return jsonify(num = 2)

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

 

 

async.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script type="text/javascript">
function fn_sync(){
	var a = 1;
	var b = 2;
	var sum = a+b;
	
	console.log("sum",sum);
}
function fn_async(){
	var a = 0;
	var b = 0;
	
	axios.post("/get1").then((res) => {
		a = res.data.num;
		console.log("ajax1",res.data.num);
	});
	axios.post("/get2").then((res) => {
		b = res.data.num;
		console.log("ajax2",res.data.num);
	});
	
	var sum = a + b;
	console.log("sum",sum)
	console.log("ajax3");
}
</script>
</head>
<body> 
ASYNC<br>
<a href="javascript:fn_sync()">sync</a><br>
<a href="javascript:fn_async()">async</a><br>
</body>
</html>

 

결과 화면2

 

 

 

  • sync

=> await 사용

 

 

my_flask.py

from flask import Flask,request,render_template, redirect, jsonify
from flask.helpers import make_response
from Cython.Compiler.Errors import message
from day12.daoemp import Daoemp
import time

app = Flask(__name__)

@app.route('/')
def main():
   return redirect("static/async_await.html")

@app.route('/get1', methods=['POST'])
def get1():
    time.sleep(1) #시간지연
    return jsonify(num = 1)

@app.route('/get2', methods=['POST'])
def get2():
    return jsonify(num = 2)

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

 

 

async_await.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script type="text/javascript">
function fn_sync(){
	var a = 1;
	var b = 2;
	var sum = a+b;
	
	console.log("sum",sum);
}
async function fn_async(){
	var a = 0;
	var b = 0;
	
	var res = await axios.post("/get1");
	a = res.data.num;
	console.log("a",a);
	
	var res = await axios.post("/get2");
	b = res.data.num;
	console.log("b",b);
	
	var sum = a + b;
	console.log("sum",sum);
}
</script>
</head>
<body> 
ASYNC<br>
<a href="javascript:fn_sync()">sync</a><br>
<a href="javascript:fn_async()">async</a><br>
</body>
</html>

 

결과 화면4

 

 

 

  • sleep 사용 (시간 지연)

my_flask.py

from flask import Flask,request,render_template, redirect, jsonify
from flask.helpers import make_response
from Cython.Compiler.Errors import message
from day12.daoemp import Daoemp
import time

app = Flask(__name__)

@app.route('/')
def main():
   return redirect("static/async.html")

@app.route('/get1', methods=['POST'])
def get1():
    time.sleep(1) #시간지연
    return jsonify(num = 1)

@app.route('/get2', methods=['POST'])
def get2():
    return jsonify(num = 2)

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

 

결과 화면3 : time.sleep()를 넣으면 됨

 

 

 

제이쿼리를 이용한 동기(sync)와 비동기(async)

 

 

  • 기본

my_flask.py

from flask import Flask,request,render_template, redirect, jsonify
from flask.helpers import make_response
from Cython.Compiler.Errors import message
from day12.daoemp import Daoemp
import time

app = Flask(__name__)

@app.route('/')
def main():
   return redirect("static/async.html")

@app.route('/get1', methods=['POST'])
def get1():
    return jsonify(num = 1)

@app.route('/get2', methods=['POST'])
def get2():
    return jsonify(num = 2)

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

 

 

async.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="jquery-3.7.1.js"></script>
<script type="text/javascript">
function fn_sync(){
	var a = 1;
	var b = 2;
	var sum = a+b;
	
	console.log("sum",sum);
}
function fn_async(){
	$.ajax({
        type: 'POST',
        url: '/get1',
        dataType : 'JSON',
        contentType: "application/json",
        success: function(resp){
            console.log(resp);
        }
    })
}
</script>
</head>
<body> 
ASYNC<br>
<a href="javascript:fn_sync()">sync</a><br>
<a href="javascript:fn_async()">async</a><br>
</body>
</html>

 

결과 화면5 : async 클릭 시

 

 

 

  • async

async.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="jquery-3.7.1.js"></script>
<script type="text/javascript">
function fn_sync(){
	var a = 1;
	var b = 2;
	var sum = a+b;
	
	console.log("sum",sum);
}
function fn_async(){
	var a = 0;
	var b = 0;
	
	$.ajax({
        type: 'POST',
        url: '/get1',
        dataType : 'JSON',
        contentType: "application/json",
        success: function(resp){
            console.log(resp.num);
            a = resp.num;
        }
    })
	$.ajax({
        type: 'POST',
        url: '/get2',
        dataType : 'JSON',
        contentType: "application/json",
        success: function(resp){
            console.log(resp.num);
            b = resp.num;
        }
    })
    
    var sum = a + b;
	console.log("sum",sum);
}
</script>
</head>
<body> 
ASYNC<br>
<a href="javascript:fn_sync()">sync</a><br>
<a href="javascript:fn_async()">async</a><br>
</body>
</html>

 

결과 화면6

 

 

 

  • sync

=> async : false 사용

 

 

async.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="jquery-3.7.1.js"></script>
<script type="text/javascript">
function fn_sync(){
	var a = 1;
	var b = 2;
	var sum = a+b;
	
	console.log("sum",sum);
}
function fn_async(){
	var a = 0;
	var b = 0;
	
	$.ajax({
        type: 'POST',
        url: '/get1',
        async : false,
        dataType : 'JSON',
        contentType: "application/json",
        success: function(resp){
            console.log(resp.num);
            a = resp.num;
        }
    })
	$.ajax({
        type: 'POST',
        url: '/get2',
        async : false,
        dataType : 'JSON',
        contentType: "application/json",
        success: function(resp){
            console.log(resp.num);
            b = resp.num;
        }
    })
    
    var sum = a + b;
	console.log("sum",sum);
}
</script>
</head>
<body> 
ASYNC<br>
<a href="javascript:fn_sync()">sync</a><br>
<a href="javascript:fn_async()">async</a><br>
</body>
</html>

 

결과 화면7

 

 

 

MVVM과 MVC 차이

 

 

MVVM는 깜빡임이 없음

정보를 하나만 보여주기 위해서 따로 페이지를 만들어야 함

 

 

MVC는 깜빡임이 있음

URL을 통해 편히 정보를 보여줄 수 있음

 

 

반응형
1 2 3 4 5 6 7 ··· 13