본문 바로가기

전체 글

(170)
[python]cx_oracle 설정, 사용 예 윈도우 환경에서 파이썬으로 오라클 DB 사용하려고 하니 다른 DB 들과는 달리 연결 설정이 그렇게 쉽지는 않군요. cx_oracle 을 보통 사용하는 듯 해서 우선 설치. pip install cx_oracle cx_oracle 8.0.0 이 별 문제없이 설치 되었다. 문제는 그 다음부터. cx_oracle 패키지를 소스에서 찾지 못하고 엉뚱한 sqlalchemy.dialects 에 있는 cx_oracle 패키지만 찾거나, 'DPI-1047: Cannot locate a 64-bit Oracle Client library' 에러만 내놓는다. 늘 그렇듯이 문제 생긴 후 매뉴얼 정독. cx_oracle 사용하려면 오라클 클라이언트 라이브러리를 별도로 설치해주어야 하는 듯. https://www.oracle...
[Python]두 DB 간 테이블 동기화 코딩 이기종 두 DB 간 테이블 동기화하는 프로그램을 간단하게 작성해보았습니다. 스케쥴러를 이용해서 정기적으로 postgresql 의 테이블 데이터를 읽어서 MariaDB 에 넣어줍니다. 작업 처리 결과를 소스 테이블의 sync_flag 컬럼에 일괄 업데이트합니다 (성공하면 'Y', 실패하면 'E') pip install mysqlclient pip install psycopg2 pip install sqlalchemy pip install pandas pip install apscheduler 중요한 몇 개 소스만 간추려 옮겨봅니다. DB 연결 구현. class Connection: def __init__(self): self.host = Config.DB['server'] self.user = Config..
[Java]여러 DB 환경에서 native query 쓸 때 orm.xml 문제 두 개 이상의 DB 환경에서 Spring Boot, JPA를 쓰려면 DB 별로 패키지를 분리해서 쓰는 방식이 일반적인 것 같아서 문서 읽으며 따라 하기 식으로 설정 끝냈습니다. 기본(적인) 설정으로는 querydsl 사용에 문제 있었지만 구조 바꾸면서 필요 없어진 부분들이라 querydsl 들어냈고 그러고는 잘 작동합니다. 그런데 개발 하는 과정에서 문제가 발생했습니다. 배치 처리할 부분을 native query 로 작성한 후 애리케이션을 실행하려고 하니 다음과 같은 에러 나면서 기동이 안되네요. ERROR o.h.internal.SessionFactoryImpl(SessionFactoryImpl.java:333) HHH000177: Error in named query: ... org.hibernate..
[MySQL]시간 올림, 내림 DB 배치 스케쥴링 때문에 찾아본 팁. 참고 : https://stackoverflow.com/questions/14626982/rounding-time-up-to-nearest-6-minute-with-mysql 1. 내림 : 정각 분 구하기 - 2020-07-14 09:13:10 => 2020-07-14 09:13:00 SELECT NOW(), DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i') + INTERVAL CASE WHEN TIME_FORMAT(NOW(),'%s')
[Python] 야구 게임 - 숫자 맞추기 어렸을 때 친구들이랑 야구 게임이란걸 종종 했었다. 공수를 번갈아가며 각자 상대가 생각한 숫자를 맞추는 게임인데 수비하는 자는 공격자가 추정한 수에서 자리까지 일치하면 스트라익, 자리는 틀리지만 자기가 생각한 수에 포함된 숫자면 볼로 구분하여 전체 볼 카운트를 알려주면 그것을 힌트로 정확한 숫자를 추리해야 한다. 아이가 풀고 있는 문제지에 이 야구 게임을 응용한 문제가 있어서 코딩으로 한 번 도전해봤다. 숫자는 5자리이고 각 자리의 수들은 모든 다른 수라고 할 때 다음 힌트를 가지고 정답을 찾아내야 한다. S B 45289 1 1 12643 2 2 70149 1 1 85201 1 1 20458 0 3 58236 1 2 성능 무시하고 일단 무식하게 짜봤다. 테이블에 있는 각 힌트값으로 후보 목록을 구한다...
[DB]윈도우 함수 이용하여 직전 데이터 값 참조하기 장비의 이벤트 데이터에는 변경된 속성 정보만 포함되어 있는데 DB 에는 몇가지 이유로 해당 시점의 모든 속성들을 다 채워넣어 저장해줘야 한다. 즉, 해당 장비의 최종 정보를 DB 에서 가져온 후 이벤트가 발생한 속성값만 변경해서 추가 저장(insert)하는 방식. DB 조회를 줄이기 위해 발생 빈도, 장비 종류/건수 등에 따라 간단하게 직접 구현하거나 Redis 를 이용해서 처리했었는데 데이터를 이원화하면서 기존 방식을 재검토해봤다. 시계열 DB 에 가공하지 않고 이벤트 데이터 그대로 저장. 일정 주기로 시계열 DB에서 신규 데이터셋 구한 뒤 애플리케이션에서 속성 채워넣는 처리 후 조회용 DB 에 벌크 인서트. 기존 소스 재활용 염두에 두고 위 방식으로 생각 풀어 가고 있었는데 같이 논의하던 한 분이 r..
[Python]pandas 의 to_sql 이용한 Bulk insert DB 를 이원화할 일이 생겨서 기존 mariadb 랑 신규 timescaledb 간 데이터 동기화 구현이 필요해졌다. 본격 작업 전에 python 으로 mariadb -> timescaledb 스크립트로 몇 가지 테스트를 해보기로 했는데 얼마 전 pandas 의 read_sql_query 과 to_csv 편하게 써먹었던 기억 있어서 DB write 하는 기능도 었으려나 하고 찾아봤는데 to_sql 이란게 제공되네요. from sqlalchemy import create_engine import pandas as pd import pymysql import time def pg_connect(user, password, db, host, port=5432): url = 'postgresql://{}:{}@..
github 에서 프로젝트 하위 폴더 다운로드하기 프로젝트 전체가 아니라 특정 폴더만 다운로드 하는 방법이 다양하게 있긴 하지만 그 중 쉬운 방법. http://kinolien.github.io/gitzip/ GitZip It can make sub-folder/sub-directory of github repository as zip and download it. --> kinolien.github.io 우측 상단 입력 상자에 sub-folder URL 입력. 황금 열쇠 버튼 누르면 표시되는 창에서 Normal 이나 Private Token 파일 다운로드. 프로젝트의 공개 범위 수준에 따라 필요한 토큰이 다르다. 가령, public & private repo 를 Normal 토큰으로 다운로드 하려고 하면 'Github: API rate limit ex..