dbm 개체는 데이터베이스의 데이터를 조회 및 추가, 삭제, 수정 할 때 사용합니다. 사용자는 dbm 개체를 이용하여 직접 쿼리를 실행할 수 있으며, 데이터베이스에 신규 테이블을 생성하거나 값을 설정 할 수 있습니다. 이력 데이터베이스와 모델 데이터베이스를 도메인(domain)으로 구분하여 쿼리를 실행합니다. 또, DataObject 개체를 이용하여 데이터를 추가하거나 수정할 수 있습니다.

Methods


리턴 값

함 수

설 명


addData( dataObject, domain )

데이터베이스에 데이터를 추가할 때 사용합니다.

list[DataObject]

cmd2( query, domain )

데이터베이스에 쿼리를 실행하고 결과를 반환합니다.

list[DataObject]

cmd2Remote( query, ip , domain )

다른 파워씬 서버의 데이터 베이스에 접속해 쿼리를 실행하고 결과를 반환합니다.

boolean

commit( domain )

데이터베이스 변경 사항을 저장합니다.

 int

isConnect()

데이터베이스에 접속 여부를 반환합니다.

  DataObject

lastInsertedData( tableName, domain )

테이블에 마지막으로 추가된 데이터를 반환합니다.

boolean

rollback( domain )

데이터베이스 변경 사항을 취소합니다.

boolean

transation( domain )

데이터베이스에 대용량의 데이터를 빠른 속도로 추가하거나 수정할 수 있습니다.


updateData( dataObject, domain )

데이터베이스의 데이터를 수정할 때 사용합니다.



 

 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를 입력하면 이력 데이터베이스에 접속됩니다.


  예)

dbm.commit()



 

 boolean rollback( domain:master 또는 history )

 

 transation 수행 중 오류 발생시 rollback 연산으로 데이터베이스 변경 사항을 되돌릴 수 있습니다.

 중간에 하나라도 실패하면 되돌릴 수 있습니다.


  • domain : master 또는 history를 입력합니다. 생략시 master 으로 입력됩니다.

               master를 입력하면 모델 데이터베이스에 접속되고, history를 입력하면 이력 데이터베이스에 접속됩니다.


 예)

dbm.rollback()