[20] Flutter DB연동

찬과장·2025년 5월 15일
0

Flutter

목록 보기
20/22
post-thumbnail

DB 연동

DB-sql문 포매팅 방법

VsCode(app.py)

from flask import Flask, request,Blueprint
# 파일 관리를 위해 Blueprint
# 해당 파일 명을 import 진행
# from 파일명  import 변수명
from dbConnect import member
app = Flask(__name__)
# register_blueprint() 사용해서 연결
app.register_blueprint(member, url_prefix="/member") # prefix 별칭
@app.route('/')
def test():
    # return타입에 html 띄울 수 있는 함수 혹은 문자열 혹은 json이 반환
    return 'hello'
@app.route('/send')
def send():
    # 데이터 받는법
    # request.args.get('보내준 곳에서의 key값')
    test = request.args.get('test')
    print(test)
    return "hello234"
if __name__ == '__main__':
    app.debug = True #저장 하면 즉시 반영
    app.run('192.168.219.102', port = 8086)

VsCode(dbConnect.py)

# python - mysql 연결 라이브러리
import pymysql
from flask import Blueprint, request
import json
# 1. Blueprint 설정
member = Blueprint("member", __name__, template_folder="templates")
@member.route('/')
def test():
    return 'hello member'
@member.route('/insert')
def insert():
    #0. 클라이언트 값 받기
    email = request.args.get('email')
    password = request.args.get('password')
    age = int(request.args.get('age')) # request의 경우 str 타임으로 받아오기 때문에 DB와 타입 일치 위해 형변환!
    name = request.args.get('name')
    print(email,password,age,name)
    # 1. db 연결 - host, user, password,schema, encoding
    db = pymysql.connect(host='localhost', user='root', password='1234', db='flutter_db', charset = 'utf8')
    # 2. 데이터 접근 객 체(cursor 객체 생성)
    # db 연결한 변수 안에 cursor가 존재
    cursor = db.cursor()
    # 3. sql문 작성
    # sql = "insert into member values('test2','1234','test2',20)"
    # pymysql의 포맷팅
    # %(변수명)s
    sql = "insert into member values(%(email)s, %(password)s, %(name)s, %(age)s)"
    # 4. 실행 cursor.excute(sql)
    cursor.execute(sql,{"email": email, "password" : password, "age" : age, "name" : name})
    # 필수는 아니나 유용한 변수 insert, update, delete 성공한 행의 개수를 파악
    row = cursor.rowcount
    # 5. 저장 후 db 닫기
    db.commit()
    db.close()
    # 데이터 insert 성공시 row라는 변수에 양수가 들어가 예정(성공한 행의 개수)
    if row > 0:
        return "success"
    else :
        return "fail"
@member.route("/login")
def login():
    # 0. 데이터 받기
    id = request.args.get("id")
    password = request.args.get("pw")
    # 1. db 연결
    db = pymysql.connect(host = "localhost",  user ="root", password = "1234", db= "flutter_db", charset = "utf8")
    # 2. 데이터 접근 객체 생성
    cursor = db.cursor()
    # 3.sql 작성
    sql = "select * from member where id = %(id)s and pw = %(password)s"
    # sql = "select * from member"
    # 4. 실행
    cursor.execute(sql, {'id': id, 'password' : password})
    # 5. 결과 받아오기
    result = cursor.fetchall() # 모든 행에 데이터 가져오기
    # cursor.fetchone() # 한개의 행만 가져오기
    # cursor.fetchmany(2) # ()안의 숫자 행 만큼 가져오기
    print(result)  # select 결과값은 튜플로 가져옴
    # 튜플은 Flask 내에서 reurtn되지 않습니다!!(return이 가능 한 타입은 json혹은 문자열)
    # 튜플은 json타입으로 변환
    row_headers = [x[0] for x in cursor.description] #db table의 name, type code, size~~
    print(row_headers) # table의 컬럼명
    json_data = [] # dict 구조들이 들어갈 예정
    for rv in result:
        json_data.append(dict(zip(row_headers, rv)))
        #zip 함수 사용해 다른 2개를 묶는 역할 -> 튜플
        #튜플 -> dict로 형변환
    #dict 가 있는 list를 json으로 변환 --> json 라이브러리 사용
    # json.dumps()
    data = json.dumps(json_data)
    # 마지막 db 저장 close
    db.commit()
    db.close()
    return data
profile
나는,,,,,,,,,나다

0개의 댓글