blob: 239956b7d983389bd262e3e3582a8992aeb51c97 [file] [log] [blame]
Cheng Tangeac10852013-06-25 16:43:32 +08001# -*- coding: utf-8
2"""数据库引擎的封装
3"""
4import os
5import traceback
6
7
8class DBEngine(object):
9 def __init__(self):
10 self.connection = None
11 self.cursor = None
12
13 def connect(self, **kwargs):
14 pass
15
16 def begin_transaction(self):
17 self.connection.begin()
18
19 def commit(self):
20 self.connection.commit()
21
22 def rollback(self):
23 self.connection.rollback()
24
25 def close(self):
26 if not self.cursor:
27 self.cursor.close()
28 if not self.connection:
29 self.connection.close()
30
31 def exec_sql(self, sql, parameters=None):
32 try:
33 if parameters:
34 self.cursor.execute(sql, parameters)
35 else:
36 self.cursor.execute(sql)
37 return True
38 except Exception, e:
39 # print u"执行数据失败"
Cheng Tang29963ee2013-06-26 15:25:09 +080040 print str(e).decode("utf-8")
Cheng Tangeac10852013-06-25 16:43:32 +080041 return False
42
43 def query(self, sql):
44 try:
45 # for r in self.cursor.execute(sql):
46 # yield r
47 self.cursor.execute(sql)
48 while True:
49 r = self.cursor.fetchone()
50 if not r:
51 return
52 yield r
53 except TypeError:
54 return
55 except Exception, e:
56 raise e
57
58 def new_cursor(self):
59 return self.connection.cursor()
60
61
62class OraEngine(DBEngine):
63 def __init__(self):
64 super(OraEngine, self)
65
66 def connect(self, **kwargs):
67 os.environ["NLS_LANG"] = "SIMPLIFIED CHINESE_CHINA.AL32UTF8"
68 try:
69 import cx_Oracle
70 if kwargs['database'] is None:
71 dsn = cx_Oracle.makedsn(host=kwargs['host'], port=kwargs['port'],
72 sid=kwargs['name'])
73 conn = cx_Oracle.connect(kwargs['user'], kwargs['password'], dsn)
74 else:
75 url = '%s/%s@%s' % (kwargs['user'], kwargs['password'], kwargs['database'])
76 conn = cx_Oracle.Connection(url)
77
78 self.connection = conn
79 self.cursor = conn.cursor()
80 except cx_Oracle.DatabaseError, e:
81 traceback.print_exc()
82 raise e
83
84
85class DB2Engine(DBEngine):
86 def __init__(self):
87 super(DB2Engine, self)
88
89 def connect(self, **kwargs):
90 try:
91 import DB2
92 conn = DB2.Connection(dsn=kwargs['database'], uid=kwargs['user'],
93 pwd=kwargs['password'])
94 self.connection = conn
95 self.cursor = conn.cursor()
96 except DB2.DatabaseError, e:
97 traceback.print_exc()
98 raise e
99
100
101def test_ora():
102 db = OraEngine()
103 db.connect(database="ECARDDB.V4.SUPWISDOM", user="ecardv4", password="kingstar")
104 db.exec_sql("delete from t_test")
105 for r in db.query("select * from t_feetype"):
106 print r
107
108
109def test_db2():
110 db = DB2Engine()
111 db.connect(database="usstbase", user="db2inst1", password="kingstar")
112 db.exec_sql("delete from ykt_cur.t_test")
113 for r in db.query("select * from ykt_cur.t_feetype"):
114 print r
115
116if __name__ == "__main__":
117 test_ora()
118 test_db2()