여기서는 'React + FLASK + MySQL + sqlalchemy'를 연동하면서 겪은 에러들에 대하여 정리합니다. 같은 스택을 사용할 경우 도움이 될수도 있어 정리합니다.
pip install Flask-SQLAlchemy
pip install -U flask-cors
: python으로 MySQL을 사용할 경우 이런 에러가 간혹 뜨곤 한다.
: 아래의 명령어를 통해 해결했다.
pip3 install cryptography
npm install react-bootstrap bootstrap
npm install axios
: 시작 모듈을 지정하지 않았을때 발생한다. 아래와 같이 시작 파일을 지정해주자
set FLASK_APP=시작 파일
- ex) set FLASK_APP=start.py
: sessionmaker 사용을 위해 engine을 두번 가동했을때 발생했다.
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://' + db['user'] + ':' + db['password'] + '@' + db['host'] + ':' + db['port'] + '/' + db['database']
app.config['SQLALCHEMY_TRACK_MODIFICATION'] = False
db = SQLAlchemy(app)
: 위와 같이 작성한 후 db.session.명령어 를 통하여 사용하니 에러가 없었다.
: 단순히 query.filter()로 인자를 받아서, 인덱스로 슬라이싱 하여 그 값을 바꾸기만 하면, 데이터베이스에 저장이 되지 않는다.( 이 점에서 특히 고생했다.)
: 아래처럼, session을 사용해서 update 해야 값이 잘 적용됐다.
from_user = db.session.query(User).filter(User._username == from_hash).update({'_pointA': User._pointC - int(cur_value)})
db.session.commit()
: Unique 키를 설정하지 않고, FOREIGN KEY를 설정하려고 할 경우의 에러. 먼저 UNIQUE를 설정해줘야 한다.
- UNIQUE 키 설정하기
alter table userinfo add UNIQUE (_userid);
alter table user add UNIQUE (_username);- 외래키 추가하기
alter table userinfo add FOREIGN KEY(_userid) REFERENCES user(_username);- UNIQUE 키 제거하기
ALTER TABLE userinfo DROP INDEX id;
: timeout 에러이다.
db.session.flush()
db.session.close()
: 이 두 가지를 사용하면 해결이 가능하다 난 전자를 사용해서 해결했다.
: 정확한 에러 문장은 기억이 안나지만, npx create-react-app pybo 실행시, 이런에러가 뜨곤 한다.
: venv 환경에서 "pvyenv" 파일과 겹쳐서 나타나는 문제 같았다. Anaconda 환경에서 실행하면 이 파일이 플라스크 파일 내의 폴더와 겹치지 않아서 Flask 파일 내의 pybo 폴더에 리액트를 작성할 수 있었다.
venv 가상환경을 Anaconda로 바꿔서 플라스크 프로젝트를 만든다.