본문 바로가기

분류 전체보기131

[flask] 로그 출력 에러가 났을 경우 로그를 출력하는 방법을 소개하고자 한다. dictConfig라는 것을 사용하면 된다. import logging from logging.config import dictConfig logging_config = { 'version': 1, 'formatters': { 'simple': { 'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s' } }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'level': 'DEBUG', 'formatter': 'simple', 'stream': 'ext://sys.stdout' }, 'file': { 'class': 'lo.. 2023. 8. 21.
[sql, sqlalchemy] 연결된 두 테이블 cascade 설정하기 - 2 (uselist 설정) 지난 글에서 문제점이 있었다. class Announcement(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(50), nullable=False) content = db.Column(db.Text, nullable=True) class AnnouncementUrl(db.Model): id = db.Column(db.Integer, primary_key=True, autoincrement=True) announcement_id = db.Column(db.Integer, db.ForeignKey('announcement.id', ondelete='CASCADE'), n.. 2023. 8. 10.
[sql, sqlalchemy] 연결된 두 테이블 cascade 설정하기 유저테이블이랑, 게시글 테이블이 있다고 가정해보자. 게시글 테이블은 id, user_id, content로 이루어져있다고 가정하자. 아무 설정도 하지 않는다면 user를 삭제하려고 한다면 아마 삭제되지 않을 것이다. 이는 user테이블과 연결된 게시글 테이블에 아직 데이터가 남아있기 때문이다. 이럴 때 어떻게 해라 라고 제약조건을 걸 수 있다. CASCADE 제약조건에 대해 알아보자. on delete, on update에 설정할 수 있는 제약조건이 여럿 있다. 이 중 restrict, set null, set default는 이름만 봐도 대충 알 수 있을 것이다. 하지만 우리는 cascade를 사용할 것이다. 이게 뭘까? 1. RESTRICT : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 .. 2023. 8. 7.
[sql, sqlalchemy] 특정 조건으로 order_by 정렬하기 - case문 데이터를 정렬시키는 코드를 짜다가, 정수 크기순, 혹은 역순 등으로 정렬하는게 아니라, 어떤 문자열일 땐 맨 위로, 어떤건 아래로 가게끔 정렬을 해야할 일이 생겼다. 아래는 요구 조건이다. 유저가 받은 알림들을 타입이 '공지'인 알림을 맨 위로 올리고, 나머지는 그 아래 위치시킨다. 또한, 시간 역순으로 정렬한다. 시간 역순으로 정렬하는 것은, order by created_at DESC 로 작성하면 쉽게 짤 수 있었다. ORDER BY created_at DESC 이는 flask의 sqlalchemy로는 아래와 같이 짤 수 있다. Table.query.order_by(Table.created_at.desc()) 하지만, 공지인 것만을 맨 위로 올리는건 쉽지 않았다. 구글링좀 해보니 case문을 사용하면.. 2023. 8. 3.
git 커밋 기록 초기화 .git 폴더 삭제 새로운 깃 폴더 생성 add, commit, push 실행 1. 먼저 다음 명령어로 .git 폴더를 삭제합니다. rm -rf .git .git 폴더 안에 git을 이용했던 모든 기록들이 담겨있습니다. 이를 삭제하면 지금까지 했던 커밋들도 삭제됩니다. 로컬에 존재하는 파일들은 삭제되지 않습니다. 2. 다음 명령어로 .git폴더를 다시 만들고 리모트 서버를 등록합니다. git init git remote add origin 3. 다음 명령어로 add, commit, push 합니다. git add . git commit -m git push -f origin 그렇게 되면 다음처럼 커밋이 한개가 되는 것을 볼 수 있다. 2023. 8. 2.
datagrip으로 table(혹은 data) export/import하는 법 export는 굉장히 쉽다. 그냥 테이블을 우클릭 하고 export버튼 누르면 된다. 하지만 import는 어떻게 하는지 너무 복잡하길래 검색하면서 찾아서 겨우 성공했다. 기억하기 위해 정리해본다. 요로코롬 export하면 sql파일이 만들어진다. 이를 datagrip으로 드래그하면 아래처럼 스크립트가 열리게 된다. 여기서 우클릭하고 run xx.sql을 클릭한다. 그 후 스키마를 추가하기 위해 +버튼을 누르고 넣고자 하는 데이터베이스(스키마)를 추가한다. 그리고 run을 누르면 import가 완료된다. 추가로 다른 테이블을 옮기는 과정에서 에러가 날 수도 있다. 아래 에러는 postgresql에서 사용하는 예약어를 이름으로 사용하였기 때문에 발생했다. 그럴 경우에는 큰 따옴표로 지정해주면 된다. 2023. 8. 1.
파이썬 딕셔너리 값 한개만 변경 여기서 created_at만 소수점을 떼고 바꿔달라는 요청이 왔다. 처음엔 obj_2_...함수 하나만 사용하던 것을 바꾸어 8개의 문장으로 지저분하게 작성해야하나 싶었다. 하지만 딕셔너리의 내장 기능을 이용해 간단하게 해결하였다. **은 딕셔너리를 풀어주는 것이라고 생각하면 된다. 여기서 created_at을 추가하는 것 처럼 보이지만, 키가 이미 존재한다면 value를 덮어씌우기도 한다. 따라서 아래처럼 created_at만 바뀌는 것을 볼 수 있다. 2023. 7. 27.
aws 버전관리 aws s3에서 파일을 실수로 삭제하였다. 삭제하면 다시 되돌릴 수 없으므로 확인을 여러번 하여야 하지만, 만일의 사태를 대비해서 '버전관리'라는 것을 사용하면 좋다. 2023. 7. 27.
object 형식 맞춰주기 단독배송인 것과, 묶음배송인 것들을 따로 담아주었고, 이렇게 묶음배송인 상품들은 각 상품엔 delivery_fee를 넣지 않았고, 단독배송인 상품들에는 각 상품에 delivery_fee를 넣어주었다. 실제로 코드 짤 때도 굉장히 복잡해서 힘들었다. 보기엔 깔끔해보일 수 있다. 하지만, 이렇게 하면, 프론트에서 단독, 묶음배송 각각을 위한 함수를 짜야한다. 따라서 아래와 같이 리턴하도록 하면 백, 프론트 모두 더 간결한 코드를 짤 수 있다. 2023. 7. 17.