Modified DAL and DB2 adapter to allow use of the official ibm_db_dbi driver or ODBC.

This commit is contained in:
Stephen Tanner
2014-10-24 14:58:52 -04:00
parent b7b94ca6b5
commit b9fe941dcc
4 changed files with 22 additions and 4 deletions
+6
View File
@@ -144,6 +144,12 @@ if not 'google' in DRIVERS:
pyodbc = None
LOGGER.debug('no MSSQL/DB2/Teradata/Ingres driver pyodbc')
try:
import ibm_db_dbi
DRIVERS.append('ibm_db_dbi')
except ImportError:
LOGGER.debug('no DB2 driver ibm_db_dbi')
try:
import Sybase
DRIVERS.append('Sybase')
+2 -1
View File
@@ -36,7 +36,8 @@ ADAPTERS = {
'mssql4' : MSSQL4Adapter,
'vertica': VerticaAdapter,
'sybase': SybaseAdapter,
'db2': DB2Adapter,
'db2:ibm_db_dbi': DB2Adapter,
'db2:pyodbc': DB2Adapter,
'teradata': TeradataAdapter,
'informix': InformixAdapter,
'informix-se': InformixSEAdapter,
+12 -2
View File
@@ -7,7 +7,7 @@ from .base import BaseAdapter
class DB2Adapter(BaseAdapter):
drivers = ('pyodbc',)
drivers = ('ibm_db_dbi', 'pyodbc')
types = {
'boolean': 'CHAR(1)',
@@ -73,8 +73,18 @@ class DB2Adapter(BaseAdapter):
self._after_connection = after_connection
self.find_or_make_work_folder()
ruri = uri.split('://', 1)[1]
def connector(cnxn=ruri,driver_args=driver_args):
return self.driver.connect(cnxn,**driver_args)
if self.driver_name == 'ibm_db_dbi':
vars = cnxn.split(";")
cnxn = {}
for var in vars:
v = var.split('=')
cnxn[v[0]] = v[1]
return self.driver.connect(cnxn['DSN'], cnxn['UID'], cnxn['PWD'], **driver_args)
else:
return self.driver.connect(cnxn, **driver_args)
self.connector = connector
if do_connect: self.reconnect()
+2 -1
View File
@@ -114,7 +114,8 @@ Supported DAL URI strings::
'mssql4://web2py:none@A64X2/web2py_test' # best pagination (requires >= 2012)
'oracle://username:password@database'
'firebird://user:password@server:3050/database'
'db2://DSN=dsn;UID=user;PWD=pass'
'db2:ibm_db_dbi://DSN=dsn;UID=user;PWD=pass'
'db2:pyodbc://driver=DB2;hostname=host;database=database;uid=user;pwd=password;port=port'
'firebird://username:password@hostname/database'
'firebird_embedded://username:password@c://path'
'informix://user:password@server:3050/database'