본문 바로가기

sqlalchemy3

[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] 특정 조건으로 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.
sqlalchemy event.listens_for 방금 sqlalchemy 문법의 event.listens_for 문법에 대해 배웠다. 형식은 아래와 같다. ArtworkLike table에 뭔가가 들어온다면 그 전에 실행하게 되는 부분이다. 데이터베이스를 추가하거나 삭제하는건 괜찮은데, 업데이트 할 때는 commit이 되지 않는 부분이 생겼다. 알고보니 session이 복제되었기 때문에 query문에 with_session(session)을 추가시켜주어 session을 명시해주니 해결되었다. 2023. 5. 10.