dbm 개체는 데이터베이스의 데이터를 조회 및 추가, 삭제, 수정 할 때 사용합니다. 사용자는 dbm 개체를 이용하여 직접 쿼리를 실행할 수 있으며, 데이터베이스에 신규 테이블을 생성하거나 값을 설정 할 수 있습니다. 이력 데이터베이스와 모델 데이터베이스를 도메인(domain)으로 구분하여 쿼리를 실행합니다. 또, DataObject 개체를 이용하여 데이터를 추가하거나 수정할 수 있습니다.
Methods
int isConnect()
|
isConnect 함수는 데이터베이스에 접속 여부를 확인합니다.
- 반환 값
- 참 : 데이터베이스에 접속되어 있으면 참을 반환합니다.
- 거짓 : 데이터베이스에 접속되어 있지 않으면 거짓을 반환합니다.
예)
# 데이터베이스 접속 여부를 확인합니다.
result = dbm.isConnect()
# 접속된 경우
if( result == 1 ):
app.messageBox('접속되어 있습니다.')
#접속되지 않은 경우
else:
app.messageBox('접속되어 있지 않습니다.')
|
|
|
list[DataObject] cmd2( query:쿼리문 , domain:master 또는 history )
|
cmd2함수는 데이터베이스에 쿼리를 실행하고 결과를 반환합니다. query의 종류가 select 퀴리의 경우 DataObject 개체 목록을 반환합니다.
- query : CREATE, SELECT 등의 쿼리문을 입력합니다
- domain : master 또는 history를 입력합니다. 생략시 master 으로 입력됩니다.
master를 입력하면 모델 데이터베이스에 접속되고, history를 입력하면 이력 데이터베이스에 접속됩니다.
반환값인 DataObject 개체의 사용방법을 참고하세요.
예) 모델 데이터베이스에 테이블 생성하기
ddl = 'CREATE TABLE [PCS_MEMBER] ( \
[idx] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \
[id] NVARCHAR(51) DEFAULT (NULL) , \
[pwd] NVARCHAR(51) DEFAULT (NULL) , \
[desc] NVARCHAR(51) DEFAULT (NULL), \
[date] DATETIME(0) DEFAULT (0) , \
[memo] BLOB(0) DEFAULT(0) ) ;'
dbm.cmd2(ddl)
|
|
예) 모델 데이터베이스의 테이블 조회하기
dataList = dbm.cmd2('SELECT * FROM PCS_MEMBER')
for data in dataList:
print data.value('id'), data.value('pwd'), data.value('desc'), data.value('date')
|
예) 이력 데이터베이스에 테이블 생성하기
ddl = 'CREATE TABLE [PCS_MEMBER] ( \
[idx] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \
[id] NVARCHAR(51) DEFAULT (NULL) , \
[pwd] NVARCHAR(51) DEFAULT (NULL) , \
[desc] NVARCHAR(51) DEFAULT (NULL), \
[date] DATETIME(0) DEFAULT (0) , \
[memo] BLOB(0) DEFAULT(0) ) ;'
dbm.cmd2(ddl , 'history' )
|
예) 이력 데이터베이스의 테이블 조회하기
dataList = dbm.cmd2('SELECT * FROM PCS_MEMBER' , 'history')
for data in dataList:
print data.value('id'), data.value('pwd'), data.value('desc'), data.value('date')
|
|
list[DataObject] cmd2Remote( query:쿼리문 , ip:다른 파워씬 서버의 IP주소, domain:master 또는 history )
|
예)
# 222.222.60.13에서 실행중인 파워씬 서버에 접속해 데이터를 가져 옵니다.
dataList = dbm.cmd2Remote('SELECT * FROM PCS_MEMBER','222.222.60.13','master')
for data in dataList:
print data.value('id'), data.value('pwd'), data.value('desc'), data.value('date')
|
|
addData( data:DataObject, domain:master 또는 history )
|
addData 함수는 입력한 데이터베이스에 데이터를 추가합니다.
- data : DataObject 개체를 입력합니다. 먼저, 추가하려는 데이터를 DataObject 개체에 설정해야 합니다.
- domain : master 또는 history를 입력합니다. 생략시 master 으로 입력됩니다.
master를 입력하면 모델 데이터베이스에 접속되고, history를 입력하면 이력 데이터베이스에 접속됩니다.
입력값인 DataObject 개체의 사용방법을 참고하세요.
예) 모델 데이터베이스에 데이터 추가하기
dbData = DataObject()
dbData.setObjectType('PCS_MEMBER')
dbData.setValue('id', 'admin')
dbData.setValue('pwd', '1234')
dbData.setValue('decript','관리자')
dbm.addData(dbData)
|
|
예) 이력 데이터베이스에 데이터 추가하기
dbData = DataObject()
dbData.setObjectType('PCS_MEMBER')
dbData.setValue('id', 'admin')
dbData.setValue('pwd', '1234')
dbData.setValue('decript','관리자')
dbm.addData(dbData, 'history')
|
|
updateData( data:DataObject, domain:master 또는 history )
|
updateData 함수는 입력한 데이터베이스에 데이터를 추가합니다.
- data : DataObject 개체를 입력합니다. 먼저, 추가하려는 데이터를 DataObject 개체에 설정해야 합니다.
- domain : master 또는 history를 입력합니다. 생략시 master 으로 입력됩니다.
master를 입력하면 모델 데이터베이스에 접속되고, history를 입력하면 이력 데이터베이스에 접속됩니다.
입력값인 DataObject 개체의 사용방법을 참고하세요.
예) 모델 데이터베이스에 데이터 수정하기
dbData = DataObject()
dbData.setObjectType('PCS_MEMBER')
# 기본 키(primary key) 컬럼 값 설정
dbData.setValue('idx', 1)
dbData.setValue('id', 'admin')
dbData.setValue('pwd', 'p1234')
dbData.setValue('desc', '메인 관리자')
dbm.updateData(dbData)
|
|
예) 이력 데이터베이스에 데이터 수정하기
dbData = DataObject()
dbData.setObjectType('PCS_MEMBER')
# 기본 키(primary key) 컬럼 값 설정
dbData.setValue('idx', 1)
dbData.setValue('id', 'admin')
dbData.setValue('pwd', 'p1234')
dbData.setValue('desc', '메인 관리자')
dbm.updateData(dbData, 'history')
|
|
DataObject lastInsertedData( table:테이블 이름, domain:master 또는 history )
|
데이터베이스와 테이블명을 입력하면 마지막으로 추가된 데이터를 반환합니다.
- table : 데이터베이스에 존재하는 테이블 이름을 입력합니다.
- domain : master 또는 history를 입력합니다. 생략시 master 으로 입력됩니다.
master를 입력하면 모델 데이터베이스에 접속되고, history를 입력하면 이력 데이터베이스에 접속됩니다.
- 반환값
- DataObject 개체를 반환합니다.
- DataObject 개체에는 테이블에 마지막으로 추가된 데이터가 담겨 반환됩니다.
반환값인 DataObject 개체의 사용방법을 참고하세요.
예) 모델 데이터베이스에 마지막으로 추가된 데이터 가져오기
dbData = dbm.lastInsertedData('PCS_MEMBER')
if dbData.isEmpty() == 0:
app.messageBox('마지막으로 추가된 데이터입니다.')
else:
app.messageBox('추가된 데이터가 없습니다.')
|
|
예) 이력 데이터베이스에 마지막으로 추가된 데이터 가져오기
dbData = dbm.lastInsertedData(' PCS_MEMBER', 'history')
if dbData.isEmpty() == 0:
app.messageBox('마지막으로 추가된 데이터입니다.')
else:
app.messageBox('추가된 데이터가 없습니다.')
|
|
boolean transaction( domain:master 또는 history )
|
transaction은 데이터베이스에서 여러 단계의 작업을 하나로 처리하기 위해 사용하며 대용량의 데이터를 빠른 속도로 추가하거나 수정 할 수 있습니다.
transation 작업이 성공적으로 완료된 경우 commit 연산으로 데이터베이스 변경 사항을 저장할 수 있으며 transation 수행 중 오류 발생시 rollback 연산으로 데이터베이스 변경 사항을 되돌릴 수 있습니다.
- domain : master 또는 history를 입력합니다. 생략시 master 으로 입력됩니다.
master를 입력하면 모델 데이터베이스에 접속되고, history를 입력하면 이력 데이터베이스에 접속됩니다.
아래는 log.csv의 데이터를 읽고 SCADA_MODEL_ANALOG_HISTORY_1 데이터베이스에 데이터를 추가, 변경하는 예시입니다.
예)
import csv
c = csv.reader(open("log.csv", "rb"))
dbm.transaction('history')
for row in c:
pid=row[0]
time=row[1]
curvalue=row[2]
deltavalue=row[3]
dbm.cmd2("insert into SCADA_MODEL_ANALOG_HISTORY_1(pid, time, curvalue, deltavalue) values(%d, '%s', %f, %f)" %(int(pid), time, curvalue, deltavalue), 'history')
dbm.cmd2("update SCADA_MODEL_ANALOG_HISTORY_1 set deltavalue=%f where time='%s' and pid='%s'"%(deltavalue, time, pid), 'history')
dbm.commit('history')
|
|
|
boolean commit( domain:master 또는 history )
|
transation 작업이 성공적으로 완료된 경우 commit 연산으로 데이터베이스 변경 사항을 저장할 수 있습니다.
- domain : master 또는 history를 입력합니다. 생략시 master 으로 입력됩니다.
master를 입력하면 모델 데이터베이스에 접속되고, history를 입력하면 이력 데이터베이스에 접속됩니다.
예)
|
|
boolean rollback( domain:master 또는 history )
|
transation 수행 중 오류 발생시 rollback 연산으로 데이터베이스 변경 사항을 되돌릴 수 있습니다.
중간에 하나라도 실패하면 되돌릴 수 있습니다.
- domain : master 또는 history를 입력합니다. 생략시 master 으로 입력됩니다.
master를 입력하면 모델 데이터베이스에 접속되고, history를 입력하면 이력 데이터베이스에 접속됩니다.
예)
|
|