2022년 5월 6일 금요일

오렌지3에서 Sqlite 데이터베이스 읽어오기

 Sqlite 데이터베이스는 데이터베이스 서버가 없는 파일형태의 데이터베이스입니다. 하나의 데이터베이스에는 여러개의 테이블이 있고 각각의 테이블은 레코드로 구성되어 있습니다.

오렌지3에서 Sqlite데이터베이스에 자료를 입력하는 경우는 별로 없을 것이고, 누군가(시스템, 기계, 여론조사 디비등등)가 만들어 놓은 자료를 접근하여 읽어오기만 하면될것입니다. (나중에 기회되면 쓰는 것도 다루어 보죠)

1. 먼저 Sqlite 데이터 베이스를 (이곳에서 다운로드) 에서 다운받아 컴퓨터의 적당한 곳에 저장해 둡니다.

2. 파이썬스크립트위젯과 데이터테이블위젯을 아래와 같이 오렌지 캔바스에 배치합니다.


2. 파이썬스크립트를 더블크릭하고 아래코드를 붙여넣기하고 [RUN] 버튼을 선택합니다.

import sqlite3
import Orange.data.pandas_compat as p

conn = sqlite3.connect('exam.sqlite', isolation_level=None)
iSql = 'select * from table2 where date >= "2010-01-01" order by date'
idf = p.pd.read_sql(iSql, conn)
out_data = p.table_from_frame(idf)
 
3. 데이터테이블위젯을 더블크릭하여 확인합니다.

3. 이제 스크립트를 설명합니다.
  • 1행: 당연히 sqlite 관련 객체를 불러오기위하여 import 하여야 겠지요.
  • 2행: pandas를 이용해 데이터베이스 내용을 읽어와야 하기때문에 오렌지3 설치될때 같이 설치된 pandas_compat를 import 해옵니다.
  • 3행: 데이타베이스와의 연결을 위한 객체를 생성합니다. (첫 인수로는 Sql 파일이 있는곳과 파일이름, commit 단계)
  • 4행: SQL 명령어
  • 4행: pandas의 read_sql을 이용하여 SQL 명령어를 연결객체에 전달합니다. 그결과가 idf에 DataFrame 형태로 보관됩니다.
  • 5행: DataFrame을 위젯의 출력으로 변환합니다.

4. SQL 명령어를 간단히 설명합니다.
  • select * from은 무조건이라고 생각하면 됩니다. 뒤에 조건에서 지정한 모든(*) 자료를 읽어오라는 것입니다.
  • exam.sqlite 라는 것이 데이타베이스입니다. 엑셀로 따지면 파일이름이겠지요.
  • table1은 엑셀에는 시트가 여럿 있듯이 데이타베이스에도 테이블이 여러개 있으며 그중 table2 에서 읽어오라는 것입니다.
  • where는 그다음의 조건에 맞는 것을 읽어오라는 것이고
  • date >= "2010-01-01"은 엑셀로 따지면 컬럼이름과 같은 의미의 date 라는 필드(컬럼)에서 "2010-01-01" 이후 자료를 지정한 것입니다.
  • order by date는 자료를 읽어 가져올때 date 라는 필드(컬럼)의 오름차순 정렬을 의미합니다.

5. SQL 명령부분은 "select * from table1" 만하고 오렌지의 다른위젯을 이용해 데이터를 취사 선택 정렬할 수 있습니다.  또한 읽기전용이기에 conn의 "isolation_level=None" 부분도 생략할 수 있습니다.








댓글 없음:

델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.