전체 글137 [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. 폭풍성장중 무럭이 엄마가 이런 무늬식물은 햇빛광합성을 하면 무늬가 희미해진다고 했다. 그래서 해가 안드는 머리맡으로 거처를 옮갸주었다.근황을 안올리는동안 잎이 무려 6개가 됐고, 무늬도 점박이무늬가 조금씩 드러나고 있다.완전 이쁜 무늬가 나올 수도 있을 것 같다! 2023. 7. 5. jwt https://jwt.io/ JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt.io 이 사이트에 들어가면 직접 jwt를 만들 수 있다. jwt는 header, payload, verify signature로 이루어져 있다. 이 세 개는 점으로 구분된다. 헤더에는 이 데이터를 어떤 알고리즘으로 인코딩할 것인지를 저장한다. payload는 우리가 암호화할 데이터이다. json형태의 데이터를 암호화한다. verify signature는 이 jwt가 문제가 있는지 없는지를 나타내주는 signature라고 생각하면 된다. 빈 부분에 랜덤.. 2023. 6. 27. access token, refresh token 근로 중에 로그인 관련 api를 만들어야 하는 일이 생겼다. 자동로그인에 필요한 access 토큰과 refresh 토큰에 대해 알아보자! 먼저 access token이란? 로그인 정보와 함께 유효기간이 저장되어있는 jwt 토큰이다. 그렇다면 refresh token이란? access token의 유효기간이 만료되었을 때, 새로운 access token을 만들어서 access할 수 있도록 갱신해준다. 물론 refresh token에도 유효기간이 존재하여, 유효기간이 지나지 않은 경우에만 갱신한다. 역할상 당연하게 refresh token의 유효기간이 access token의 유효기간보다 길다. (예시 : access token 유효기간 - 1시간, refresh token 유효기간 - 1달) https:/.. 2023. 6. 27. DDL, DML이란? https://appmaster.io/ko/blog/ddlgwa-dmlyi-caijeom DDL과 DML의 차이점 | AppMaster SQL에서 DDL과 DML의 차이점과 이들이 데이터베이스를 관리하는 방법을 알아보세요. DBA와 개발자에게 필수적일 수 있습니다. appmaster.io 위 페이지를 보고 도움이 많이 되었다. DDL 과 DML 의 차이점은 무엇입니까? DDL ( Data Definition Language)은 데이터베이스 스키마를 정의하는 일련의 SQL 명령입니다. 단순히 데이터베이스 스키마에 대한 설명을 다루고 데이터베이스 개체의 구조를 만들고 수정하는 데 사용됩니다. DDL 문의 예로는 CREATE, ALTER 및 DROP 이 있습니다. DML ( Data Manipulation L.. 2023. 6. 21. 잎이 활짝 핀 무럭이 이때 3일동안 집을 비웠었나?? 3일만에 남은 두 새순도 잎을 활짝 피웠다! 무럭무럭 자라줘서 기분이 좋습니다. 원래는 무늬가 선명한 희귀무늬 식물이지만! 무늬가 없어도 괜찮다. 그것대로 매력이니까? 더 초록초록하니까 더 파릇파릇한거지 뭐 ㅎㅎ 광합성도 더 잘하고 좋네 2023. 6. 12. 내가 사용하는 유용한 단축키 모음! 배울 때 마다 하나씩 추가하겠음 개발자 도구 한 파일에서 찾기 : cmd + F 전체 파일(source)에서 찾기 : cmd + opt + F (윈도우 : ctrl + shift + F) vscode ctrl + g : 줄 번호 이동 cmd + d : 블록지정 및 같은 단어 찾아서 블록지정 (아주 유용!) cmd + shift + L : 그 파일에서 같은 단어 모두 블록지정 f2 : 이름 바꾸기 (알아서 모든 이름을 바꿔줌. 같은 이름의 다른 변수도 구분해줌. 보기 : 그룹에서 다음 편집기 열기, 이전 편집기 열기 나는 탭 이동을 많이 사용하는 편이다. 하지만 vscode에서는 cmd+0~9로 탭이동이 불가능하다. 그래서 내멋대로 바꿔주었다. 원래 있던 편집기를 첫 번째, 두 번째 그룹으로 이동 기능은 .. 2023. 6. 1. 5월 말 무럭이 무럭이 근황 올리려고 하면 자라고 ... 또 올리려고 하면 자라서 그냥 한꺼번에 올려버림 이틀 전에 잎 나기 시작했는데 오늘 보니까 뻥 살짝 치고 손바닥만해졌다! 이름 값 잘 하는구만 2023. 5. 31. 사이트의 HTML 문서 가져오기 어떤 사이트든 HTML문서를 가져올 수 있다. 다음과 같이 requests.get(url)을 하면 그 응답이 담기게 되고, 에러가 없을 경우 .text를 하면 코드가 텍스트 형태로 담기게 된다. .json을 하면 json형태로 담기는 것도 같은 방식이라고 생각한다. 또한, BeautifulSoup라는 것을 이용하면 그 코드를 쉽고 간편하게 원하는 것만 가져올 수 있는 기능을 사용할 수 있다. soup = BeautifulSoup(response.text, 'html.parser') shipping_result = soup.select_one('table.table_col > tbody > tr:first-child > td:last-child') 예를 들어 다음과 같이 작성한다면 html을 쉽게 파싱할 .. 2023. 5. 31. 무럭이 5.12 무럭이 진짜 많이 자랐다! 뿌리도 엄청 길고 새순도 눈에 띄게 길어졌다.그래서 흙으로 옮겨주었다! 머리를 힘차게 내밀 수 있도록 새순을 빼꼼시켜줬다. 물도 줬다! 2023. 5. 12. sqlalchemy event.listens_for 방금 sqlalchemy 문법의 event.listens_for 문법에 대해 배웠다. 형식은 아래와 같다. ArtworkLike table에 뭔가가 들어온다면 그 전에 실행하게 되는 부분이다. 데이터베이스를 추가하거나 삭제하는건 괜찮은데, 업데이트 할 때는 commit이 되지 않는 부분이 생겼다. 알고보니 session이 복제되었기 때문에 query문에 with_session(session)을 추가시켜주어 session을 명시해주니 해결되었다. 2023. 5. 10. 무럭이 4.20 뿌리가 길어졌고 옆에 싹이 나기 시작했다 2023. 5. 1. 이전 1 2 3 4 5 6 7 다음