[Flask] SQLAlchemy 사용법

Asher Park·2022년 12월 17일
1

Python

목록 보기
3/3
post-thumbnail
post-custom-banner

지난번에는 Flask 환경에서 DB (MySQL) 을 연결하는 것 까지 해보았다.

이번에는 SQLAlchemy 라이브러리를 사용하여 데이터들을 조작 해보겠다!

다음 예시 코드들은 스파르타코딩클럽 내일배움캠프 프로젝트의 일부입니다!

❗ 연결하는 부분을 보지 않으신 분들은 아래 링크를 한번 읽고오세요!
Flask DB연결 (MySQL, SQLAlchemy)

1. Select

sql = "SELECT * FROM Users WHERE user_id = %s"
rows = app.database.execute(sql, userId)

execute에는 쿼리문이 들어갈 수 있고, 그 다음으로 변수 값을 넣을 수 있다.

2. Insert

sql = "INSERT INTO Users(nickname, id, pw, name, email, createdAt) VALUES (%s, %s, %s, %s, %s, %s)"
app.database.execute(sql, (nickname, id, pw, name, email, datetime.datetime.now()))

3. Delete

sql = "DELETE FROM Posts WHERE id = %s"
app.database.execute(sql, id)

4. Update

sql = "UPDATE Users SET nickname = %s"
app.database.execute(sql, nickname)

사실 SQL 쿼리문만 잘 작성해주면 사용법은 다 똑같다.

💯 SQLAlchemy의 사용법이라기 보다 MySQL의 쿼리문을 잘 작성해야 한다.


결과값 받아오기!

❗ 이게 정말 중요하다.

Select 예시 코드를 다시한번 보자.

sql = "SELECT * FROM Users WHERE user_id = %s"
rows = app.database.execute(sql, userId)

rows에 어떤 방식으로 담겨올것 같나요?

정답은, 튜플이 들어있는 리스트로 받아오게 된다.

[(nickname, id, pw, name, email, createdAt) , (...), (...)]

그래서 바로 print를 하거나, Front로 넘기려고 하면 TypeError가 뜨게 된다.

print를 하기 위해서는 다음과 같은 방식으로 해야한다.

for record in rows:
	print(record)

하지만, 우리의 목적은 json객체 형태로 front와 통신을 하는 것 이기 때문에
번거롭지만 작업을 한번 더 거쳐야 한다.

data = []
for record in rows:
	temp = {
    	"id": record[0],
        "user_id" : record[1],
        ...
        ...
    }
    data.append(temp)

각 튜플 record들을 딕셔너리 형태로 만들어 리스트에 담아, 최종적으론 딕셔너리가 들어있는 리스트 형태로 만든다.

이렇게 JS의 Ajax나 Axios와 데이터를 주고 받을 수 있다.

profile
배움에는 끝이없다
post-custom-banner

0개의 댓글