ORM, SQL
SQL의 종류
SQLD 딸 때 공부한 것 같은데 까먹었다 ㅋㅋ
앞의 D를 Data가 아니라 Table로 바꿔서 생각하면 좀 더 이해하기 쉬운 것 같다.
종류 | 의미 | 명령어 |
DDL | 데이터의 구조를 정의하는 언어이다 | CREATE, ALTER, DROP, RENAME |
DML | 데이터 조작(조회, 입력, 수정, 삭제)를 하는 언어 | SELECT, INSERT, UPDATE, DELETE |
DCL | 사용자의 권한을 조작한다.... 는데 안 써봐서 솔직히 이해는 안 감 ㅎ |
REVOKE, GRANT, TRUNCATE |
TCL | 내가 한 수정을 반영할 것인지, 다시 이전 버전으로 돌아갈지를 제어한다 | COMMIT, ROLLBACK, SAVEPOINT |
ORM
객체형태로 테이블을 매핑하는 것
파이썬 클래스의 속성으로 한 row의 칼럼들을 표현하는 것이다.
### __init__.py
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
### user_model.py
from sqlalchemy import Column, String, Integer, Sequence
from model import Base
class User(Base):
__tablename__ = "user"
name = db.Column(db.String(20), primary_key=True)
age = db.Column(db.Integer, nullable=False)
def __init__(self, name, age):
self.name = name
self.age = age
이런 식이나
### db_connect.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
### model.py
from db_connect import db
class User(db.Model):
name = db.Column(db.String(20), primary_key=True)
age = db.Column(db.Integer, nullable=False)
def __init__(self, name, age):
self.name = name
self.age = age
이렇게 두가지 방법이 있는데,
위는 __init__, user_model, main가 있는 구조였고
아래는 model, app, db_connect가 있는 구조였다.
솔직히 지금 시점에선 뭐가 어떻게 다른지 모르겠고, db_connect는 왜 거치고 이해가 가지 않는다.
ORM으로 쿼리 날리기(데이터 받기)
### db_connect.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
### 어느 파일에서의 쿼리 날리기
from db_connect import db
# 좀더 명시적인 쿼리, 오더바이, 내림차순
db.session.query.filter(Model.name == name).order_by(Model.age.desc())
# 코드가 간결한 쿼리, 문자열(LIKE)
Model.query.filter(Member.name.like('송%')
# limit, offset 적용하기
Member.query.order_by(Member.age.desc()).limit(LIMIT_NUM).offset(OFFSET_NUM)
# 갯수 새기
cnt = Model.query.filter(Member.name.like('송%').count()
Flask
from flask import Flask, request, render_template, redirect
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from model import Base
from model.user_model import UserModel
engine = create_engine("sqlite:///main.db")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine) # bind=engine으로 db랑 연결
session = Session() # session cursor랑 비슷한 역할
app = Flask(__name__)
@app.route('/')
def hello():
return render_template("main.html")
@app.route('/register')
def register():
if request.method == 'POST':
name = request.form['name']
age = request.form['age']
user = UserModel(name,age)
session.add(user)
session.commit()
else:
return redirect('/')
if __name__ == '__main__':
app.run()
name이랑 age에 대한 검증과정이 있진 않지만, 이런 느낌으로 main.db에 추가할 수 있다.
정리하면서 보니 다른 테이블에 입력하는 건 잘 모르겠다.
-> 애초에 ORM으로 인스턴스를 생성하면서 어디에 들어갈지는 정해지는 것 같다???
-> 만약 아니면 쿼리문 짜서도 할 수 있으니 ㄱㅊ
Blueprint
블루프린트라는 것을 활용해서 각 테이블 별로, 혹은 모종의 기준으로 구분되는 함수들을 구분하여(모듈화하여) 유지보수를 좀 더 용이하게 해주는 객체이다.
1. 모듈에서 bp를 선언하고 관련 함수들을 @bp.route로 만들어준다.
bp = Blueprint('register', __name__)
2. 하나의 bp객체를 main.py 혹은 app.py에서 import한다.
3. flask app에 등록한다.(app.register_blueprint(bp))
디렉토리 구조
여기 코치님께서 만드신 플라스크 프로젝트의 구조를 올려보려다가, 인터넷에 있을 것 같아 검색해보았더니 공식문서에 Layout?Structure에 대한 내용이 있길래 링크를 첨부한다.
https://flask.palletsprojects.com/en/2.0.x/tutorial/layout/
'교육, 대외활동, 봉사 > 엘리스 AI 트랙 2기' 카테고리의 다른 글
[엘리스] Docker, 팀 스터디, 팀 프로젝트 (13주차, 방학) (0) | 2021.09.26 |
---|---|
[엘리스] 엘리스에서의 첫 프로젝트 (0) | 2021.09.11 |
[엘리스 AI 트랙 2기] Day 17 - SQL (0) | 2021.07.14 |
[엘리스 AI 트랙 2기] Day 16 - flask, sql (0) | 2021.07.12 |
[엘리스 AI 트랙 2기] Day 15 - 모바일 웹페이지 (0) | 2021.07.11 |
댓글