TEST_TABLE = sqlalchemy.Table(
"TEST_TABLE",
metadata,
sqlalchemy.Column("user_id", sqlalchemy.Integer),
sqlalchemy.Column("del_yn", sqlalchemy.String),
sqlalchemy.Column("update_time", sqlalchemy.DateTime)
)
# MAX_HISTORY 관리를 위한 delete 작업
MAX_HISTORY = 10 # 레코드를 이 개수만 유지 (FIFO)
where_clause = f"""user_id={user_id} AND del_yn <> 'Y'"""
query = f"""
/* 수정일시 - ISO 8601 format (명시적 datetime 객체 바인딩이 아니라 sqlalchemy.engine.row.Row 로 자동 바인딩 되므로 쿼리단에서 포맷팅 수행) */
select date_format(update_time, '%Y-%m-%dT%TZ') as dt
from TEST_TABLE
where {where_clause}
order by update_time desc
"""
list = await db.fetch_all(query) ## 목록 조회
if list and len(list) > MAX_HISTORY:
max_one = list[MAX_HISTORY - 1] # sqlalchemy.engine.row.Row 타입
max_dt = dict(max_one)['dt']; # dict 로 변환 후 값 획득
where_clause = where_clause + f" AND update_time < '{max_dt}'"
query = TEST_TABLE.update().values(update_time=datetime.utcnow(), del_yn="Y").where(text(where_clause))
his_deleted = await db.execute(query) # delete
Subscribe
Login
0 Comments