728x90
반응형

IT/파이썬 32

[플라스크] 다대다 관계 모델 설정 (SQLAlchemy)

models.py class Question(db.Model): user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), nullable=False) user = db.relationship('User', backref=db.backref('question_set')) ... class User(db.Model): ... 위와 같이 kf로 참조되는 두 테이블을 다대다로 만들고자 한다. models.py question_voter = db.Table( 'question_voter', db.Column('user_id', db.Integer, db.ForeignKey('user.id', ondelete='CASCADE'), p..

IT/파이썬 2021.05.31

sqlalchemy 에러 : Parent instance <Comment at 0x25c4fc08340> is not bound to a Session; lazy load operation of attribute 'answer' cannot proceed

@bp.route('/delete/answer/') @login_required def delete_answer(comment_id): comment = Comment.query.get_or_404(comment_id) db.session.delete(comment) db.session.commit() return redirect(url_for('question.detail', question_id=comment.answer.question_id)) 위와 같이 comment_id를 통해 comment를 db에서 삭제하는 함수를 만들었다, 그런데 실행해보면 db에서 데이터는 사라지는데 페이지가 제대로 로드되지 않고 에러를 띄운다. sqlalchemy.orm.exc.DetachedInstanceError s..

IT/파이썬 2021.05.31

flask db migrate시 에러 ValueError: not enough values to unpack (expected 2, got 1)

새로운 테이블을 추가하기 위해 모델 파일을 변경하고 migrate를 실행했을 때 unpack 밸류가 부족하다는 에러가 뜸 (myproject) C:\projects\myproject>flask db migrate Traceback (most recent call last): File "C:\Python39\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, ... File "c:\venvs\myproject\lib\site-packages\sqlalchemy\sql\naming.py", line 87, in _key_referred_table_name reftable, refcol = refs ..

IT/파이썬 2021.05.31

[플라스크] ModuleNotFoundError: No module named 'flask_wtf' 에러

git에서 코드 받아오고 cmd로 flask run 했는데 에러 뜸 (myproject) C:\Users\username\PycharmProjects\myFlaskProject\myproject>flask run * Serving Flask app 'pybo' (lazy loading) * Environment: development * Debug mode: on Traceback (most recent call last): File "C:\Python39\lib\runpy.py", line 197, in _run_module_as_main return _run_code(code, main_globals, None, ... File "C:\Users\username\PycharmProjects\myFla..

IT/파이썬 2021.05.28

파이썬 데코레이터

데코레이터 @app.route("/")와 같은 데코레이터를 직접 만들자 def decorator(): dec wrapper(): ... return wrapper 기본적으로 이런 형식 이렇게 만들어놓고 @decorator 처럼 앞에 @ 붙여서 함수 위에다 쓰면 됨 예제 # 데코레이터 정의 def mydeco(func): def a(): print('func start') func() print('func end') return a # 함수에 적용 @mydeco def myfunc(): print('i am myfucn') 이제 myfunc()를 호출하면 아래처럼 나온다 return 리턴해주는 함수는 이렇게 (사실 똑같음... 그냥 return 한번 더해주는것 뿐) def mydeco(infunc): de..

IT/파이썬 2021.05.27

플라스크에서 ORM 사용하기 5 - db에 데이터 넣기

html submit 누르면 answer 블루프린트의 create 함수 찾아감 post로 보냈으므로 받는쪽도 post여야함 blueprint from flask import Blueprint, url_for, request from werkzeug.utils import redirect from datetime import datetime from pybo import db from pybo.models import Answer, Question bp = Blueprint('answer', __name__, url_prefix='/answer') @bp.route('/crate/', methods=('POST',)) def create(question_id): question = Question.quer..

IT/파이썬 2021.05.24

플라스크에서 ORM 사용하기 4 - 라우팅

파라메터 받기 @bp.route('/detail//') def detail(question_id): question = Question.query.get(question_id) return render_template('question/question_detail.html', question=question) 없는 question_id 요청할때 404 띄우기 get_or_404 question = Question.query.get_or_404(question_id) redirect url_for와 redirect 임포트 필수 from flask import Blueprint, url_for from werkzeug.utils import redirect ... @bp.route('/') def index..

IT/파이썬 2021.05.24

플라스크에서 ORM 사용하기 3 - db에서 데이터 가져오기

현재 db 블루프린트 파일 (main_views.py) 수정 render_tempate 추가하고 pybo.models에서 Question에 대한 쿼리 작성해서 넣어줌 from flask import Blueprint, render_template from pybo.models import Question ... @bp.route('/') def index(): question_list = Question.query.order_by(Question.create_date.desc()) return render_template('question/question_list.html', question_list=question_list) 리턴할 question/question_list.htm 파일 작성 파일 경로는..

IT/파이썬 2021.05.24

플라스크에서 ORM 사용하기 2 - 모델 및 테이블 생성

모델 생성 from pybo import db # Question 테이블 스키마 정의하는 클래스 class Question(db.Model): id = db.Column(db.Integer, primary_key=True) subject = db.Column(db.String(200), nullable=False) content = db.Column(db.Text(), nullable=False) create_date = db.Column(db.DateTime(), nullable=False) class Question(db.Model) flask db migrate INFO [alembic.runtime.migration] Context impl SQLiteImpl. INFO [alembic.runti..

IT/파이썬 2021.05.23

플라스크에서 ORM 사용하기 1

SQLAlchemy : 플라스크 ORM 라이브러리 중 하나 Flask-Migrate : 파이썬 모델을 이용해 테이블 생성, 컬럼 추가 등 하게 해주는 라이브러리 * ORM이란? 2019.08.27 - [IT/자바] - ORM, JPA, Hibernate 설치 Flask-Migrate 설치하면 SQLAlchemy도 같이 설치됨 (myproject) C:\projects\myproject>pip install Flask-Migrate Collecting Flask-Migrate Downloading Flask_Migrate-3.0.0-py2.py3-none-any.whl (12 kB) . . . Successfully installed Flask-Migrate-3.0.0 Flask-SQLAlchemy-2.5..

IT/파이썬 2021.05.23
300x250
반응형