postgresql에서 trunc 함수는 무엇일까요? 0 이상의 double형에서는 소수점을 버리기 위해, 미만인 경우 올림 처리를 하기 위해 쓰게 됩니다. 수학적으로 즉 0 이상에서는 floor와, 미만에서는 ceil과 동일하다고 할 수 있어요. trunc(-1.23, 1)을 보겠습니다. 소수점 1째 자리까지 나타냅니다. trunc한 결과를요. -1.23은 0보다는 작으므로 ceil을 하게 됩니다. -1.3은 -1.23보다는 작고, -1.2는 -1.23보다는 크거나 같습니다. 따라서, -1.2가 출력됩니다. 실행 결과는 위와 같습니다. trunc의 2번째 인자에 아무것도 주지 않으면 0보다 크거나 같은 경우 floor를, 작은 경우 ceiling을 하게 되는데요. 아래 예제를 보겠습니다. select ..
전체 글 검색 결과
exception이 발생하였을 때, 재시도를 r회 하는 로직은 생각보다 많이 쓰이게 됩니다. 어떻게 하는지 간단하게 알아보겠습니다. 예제를 하나 보겠습니다. 위 예제는 t = 1/0을 10번 재시도 하는 예제입니다. 보시면, t = 1 / 0 부분에서 계속 ZeroDivisionError가 뜨게 됩니다. 이 때, r이 retry보다 작으면 continue를 하고, 그렇지 않으면 raise를 하게끔 하였습니다. retry는 재시도 횟수인데요. 1부터 retry회까지 카운트가 됩니다. 고로, r이 retry보다 작다면 continue문을 타고, retry번 이상 재시도를 했다면 raise, 그러니까 예외를 발생시켜버리게 됩니다. 10번 재시도를 하고, ZeroDivisionError가 뜨게 됩니다. 저 코드..
java의 bit 연산자 중에 >>와 >>> 연산자가 있습니다. 이 둘의 차이에 대해 간단하게 알아보겠습니다. 먼저, 위에 2개는 -2 >> 1과 -2 >>> 1의 값을 출력합니다. 아래 2개는 2 >> 1과 2 >>> 1을 출력합니다. 출력 결과를 봅시다. -1, 2147483647이 나오고, 밑에 2개는 1, 1이 나옵니다. 이게 어떻게 된 것일까요? 먼저 -2의 2의 보수 표현법으로 표기해 봅시다. 2를 2진법으로 표현하면 위 그림과 같습니다. 여기서 비트가 0인 것은 1로 바꾸고, 1인 것은 0으로 바꿔보겠습니다. 그러면 1...1101이 됩니다. 여기서 1을 더해보겠습니다. 그러면 11..110이 됩니다. 여기에서, 부호를 결정하는 비트는 1로 표시했습니다. t가 -2인 경우, 표현 방식은 위와..
안녕하세요. 이번 시간에는 sqlalchemy에서 like 연산자를 쓰는 방법을 알아보겠습니다. 하나 조심해야 할 것은, 당연하게도 유저의 입력값을 믿으면 안 된다인데요. 이게 무슨 소리일까 싶습니다. like의 경우 %와 _ 등으로 인해 의도치 않은 결과가 나올 수 있습니다. 입력값 필터링을 하지 않거나 escaping을 하지 않은 경우 문제가 발생할 수도 있다는 의미입니다. 먼저 실습에 사용할 데이터입니다. 테이블 A에는 title이 aa, ba, _a, %a인 것이 있습니다. 그리고 models.py에 정의된 모델 A에 대한 클래스입니다. 저는 like 연산자를 썼습니다. Query parameter로 들어오는 keyword에 대해, 접두어가 keyword인 title을 찾습니다. 무엇이 문제일까요..
불변 객체는 생각보다 중요합니다. 예를 들자면, 해시에서 키를 넣을 때, 변할 수 있는 객체면 곤란해 질 수 있습니다. 왜냐하면 객체의 내용이 변하면 hash값이 변하기 때문입니다. 하지만, hash에서 탐색하기 시작하는 위치는 안 바뀌기 때문에 (재해싱을 하지 않는 이상) 이상하게 동작하게 됩니다. python에서는 immutable을 흉내낼 수 있는 것이 있는데요. dataclasses의 frozen을 True로 설정하면 가능합니다. 간단하게 알아보겠습니다. 3.7부터 추가된 dataclass를 이용해서, immutable을 흉내낼 수 있다고 하였습니다. 잠깐. immutable의 대표적인 것은 tuple이 있습니다. 반면, mutable은 list가 있습니다. list는 append 등으로 원소를 ..
최근댓글