初始版本
diff --git a/dbengine.py b/dbengine.py
new file mode 100644
index 0000000..0ec5c3d
--- /dev/null
+++ b/dbengine.py
@@ -0,0 +1,118 @@
+# -*- coding: utf-8
+"""数据库引擎的封装
+"""
+import os
+import traceback
+
+
+class DBEngine(object):
+    def __init__(self):
+        self.connection = None
+        self.cursor = None
+
+    def connect(self, **kwargs):
+        pass
+
+    def begin_transaction(self):
+        self.connection.begin()
+
+    def commit(self):
+        self.connection.commit()
+
+    def rollback(self):
+        self.connection.rollback()
+
+    def close(self):
+        if not self.cursor:
+            self.cursor.close()
+        if not self.connection:
+            self.connection.close()
+
+    def exec_sql(self, sql, parameters=None):
+        try:
+            if parameters:
+                self.cursor.execute(sql, parameters)
+            else:
+                self.cursor.execute(sql)
+            return True
+        except Exception, e:
+            # print u"执行数据失败"
+            print str(e)
+            return False
+
+    def query(self, sql):
+        try:
+            # for r in self.cursor.execute(sql):
+            #     yield r
+            self.cursor.execute(sql)
+            while True:
+                r = self.cursor.fetchone()
+                if not r:
+                    return
+                yield r
+        except TypeError:
+            return
+        except Exception, e:
+            raise e
+
+    def new_cursor(self):
+        return self.connection.cursor()
+
+
+class OraEngine(DBEngine):
+    def __init__(self):
+        super(OraEngine, self)
+
+    def connect(self, **kwargs):
+        os.environ["NLS_LANG"] = "SIMPLIFIED CHINESE_CHINA.AL32UTF8"
+        try:
+            import cx_Oracle
+            if kwargs['database'] is None:
+                dsn = cx_Oracle.makedsn(host=kwargs['host'], port=kwargs['port'],
+                    sid=kwargs['name'])
+                conn = cx_Oracle.connect(kwargs['user'], kwargs['password'], dsn)
+            else:
+                url = '%s/%s@%s' % (kwargs['user'], kwargs['password'], kwargs['database'])
+                conn = cx_Oracle.Connection(url)
+
+            self.connection = conn
+            self.cursor = conn.cursor()
+        except cx_Oracle.DatabaseError, e:
+            traceback.print_exc()
+            raise e
+
+
+class DB2Engine(DBEngine):
+    def __init__(self):
+        super(DB2Engine, self)
+
+    def connect(self, **kwargs):
+        try:
+            import DB2
+            conn = DB2.Connection(dsn=kwargs['database'], uid=kwargs['user'],
+                pwd=kwargs['password'])
+            self.connection = conn
+            self.cursor = conn.cursor()
+        except DB2.DatabaseError, e:
+            traceback.print_exc()
+            raise e
+
+
+def test_ora():
+    db = OraEngine()
+    db.connect(database="ECARDDB.V4.SUPWISDOM", user="ecardv4", password="kingstar")
+    db.exec_sql("delete from t_test")
+    for r in db.query("select * from t_feetype"):
+        print r
+
+
+def test_db2():
+    db = DB2Engine()
+    db.connect(database="usstbase", user="db2inst1", password="kingstar")
+    db.exec_sql("delete from ykt_cur.t_test")
+    for r in db.query("select * from ykt_cur.t_feetype"):
+        print r
+
+if __name__ == "__main__":
+    test_ora()
+    test_db2()