python-flask에서 DB와의 커넥션은 엔진을 만들고 이를 바탕으로 session을 가져오는 방식으로 진행한다


# Engine을 통해서 session을 가져온다
Engine = create_engine( ~~~~~)
Session= scoped_session(sessionmaker(~~~~~, bind = Engine)

#session을 통해서 테이블의 데이터를 가져올 수 있다.
session.query(table).all() # 1) 해당 테이블 전체  가져오기
session.query(table).first() # 2) 해당 테이블에서 한줄만 가져오기

# 내가 해당 테이블의 모든 칼럼 정보가 필요로 하다면 위에처럼 가져오는게 맞다. 하지만 특정 칼럼 정보만 필요하다면 
session.query(table.column_one).first() # 3) 이런식으로 특정 칼럼을 명시해주는 것이 퍼포먼스 상으로 좋다.

# 하지만 만약에 특정 칼럼만 가져와서 데이터 확인 후 이를 업데이트 해야하는 경우가 있다면 위의 3)의 경우를 사용할 수 없다.

row = session.query(table).first() # 4)

row.column = new_value 
or 
setattr(row, column, new_value) 

# 보통 session으로 가져왔을 경우의 update 방식이다. 이 경우는 table에서 특정 칼럼을 지칭하지 않았다.
# 하지만 이럴 경우 위에서 언급했듯이 퍼포먼스의 이슈가 있고 좀더 빠르게 처리하기 위해선 특정 칼럼 가져오기 + update를 해야한다.
# 3)에서 했던 방식으로 update를 할 경우.. 즉

row = session.query(table.column).first() # 5)
row.column = new_value or setattr(row, column, new_value)
# 위 방식으로 할 경우 업데이트가 되지 않는다.
# 왜냐하면 4번의 결과값과 5번의 결과값은 확연히 다르기 때문이다.

# 4번은 colletion_result이므로 setter가 존재한다. 하지만 5)번은 4번과 모양은 같지만 타입은 tuple에 불과하다. 그렇기에 setter가 존재하지 않는다.
# https://stackoverflow.com/questions/51391039/cant-set-attribute-on-result-objects-in-sqlalchemy-flask 를 보면 자세히 알 수 있다.

# 그렇다면 특정 칼럼만 가져오면서 update를 할 수 있는 방법은 없을까?
# rom sqlalchemy.orm import load_only 를 사용하면 된다.

query = session.query(Table).options(load_only("column_one", "column_two")) # 6)
# 위 방법은 컬럼을 단 두개만 가져온다. 또한 setter를 가지고 있기에 update를 사용할 수 있다.
# 실제 0.76 정도 걸리던 실행시간이 0.40 정도로 줄일 수 있었다.

python-devel 패키지? 가 없어서 발생하는 에러라고 한다.

설치된 파이썬 버젼에 맞춰서 설치해주면 되는데..


링크 : 스택오버플로우


나는 안된다.



내 에러는 위와 같은데 setup.py를 하는 도중 에러가 발생하고, 아래서 세번째 줄을 보면 -fpic -I 어쩌고 하는 부분에서 3.6이 언급되어있다.


링크 : 위 관련 블로그


나는 여태 3.4버젼을 사용하니 python34-devel을 설치하면 되는줄 알았는데 얘는 그게 아니었다.

그래서 python36-devel로 설치한 후 원하는 패키지를 설치하니 성공하였다...


동시에 많은 수의 requests를 날리기 위해 async를 사용해야했다.

그리고 간단한 테스트 등은 주피터 노트북이 편하기에 거기서 스크립트를 작성하여 async로 날렸는데 event loop is running 에러가 뜬다.


원인은 주피터 내에 있는 tornado 때문인듯(?)

tornado가 5버젼 이상이면 그리하다고 하여

torando를 다운그레이드 하였다.


!pip install tornado==4.5.3 인가.. 암튼.. 5보다 낮게.


jupyter notebook event loop tornado로 검색하면 많이 나올 것이다.

+ Recent posts