지난번에는 Flask 환경에서 DB (MySQL) 을 연결하는 것 까지 해보았다.
이번에는 SQLAlchemy 라이브러리를 사용하여 데이터들을 조작 해보겠다!
다음 예시 코드들은 스파르타코딩클럽 내일배움캠프 프로젝트의 일부입니다!
❗ 연결하는 부분을 보지 않으신 분들은 아래 링크를 한번 읽고오세요!
Flask DB연결 (MySQL, SQLAlchemy)
sql = "SELECT * FROM Users WHERE user_id = %s"
rows = app.database.execute(sql, userId)
execute에는 쿼리문이 들어갈 수 있고, 그 다음으로 변수 값을 넣을 수 있다.
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()))
sql = "DELETE FROM Posts WHERE id = %s"
app.database.execute(sql, id)
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와 데이터를 주고 받을 수 있다.