59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
from .._compat import integer_types, long
|
|
from .base import SQLAdapter
|
|
from . import adapters, with_connection_or_raise
|
|
|
|
|
|
class DB2(SQLAdapter):
|
|
dbengine = "db2"
|
|
|
|
def _initialize_(self, do_connect):
|
|
super(DB2, self)._initialize_(do_connect)
|
|
self.ruri = self.uri.split('://', 1)[1]
|
|
|
|
@with_connection_or_raise
|
|
def execute(self, *args, **kwargs):
|
|
command = self.filter_sql_command(args[0])
|
|
if command[-1:] == ';':
|
|
command = command[:-1]
|
|
handlers = self._build_handlers_for_execution()
|
|
for handler in handlers:
|
|
handler.before_execute(command)
|
|
if kwargs.get('placeholders'):
|
|
args.append(kwargs['placeholders'])
|
|
del kwargs['placeholders']
|
|
rv = self.cursor.execute(command, *args[1:], **kwargs)
|
|
for handler in handlers:
|
|
handler.after_execute(command)
|
|
return rv
|
|
|
|
def lastrowid(self, table):
|
|
self.execute("SELECT DISTINCT IDENTITY_VAL_LOCAL() FROM %s;" % table)
|
|
return long(self.cursor.fetchone()[0])
|
|
|
|
def rowslice(self, rows, minimum=0, maximum=None):
|
|
if maximum is None:
|
|
return rows[minimum:]
|
|
return rows[minimum:maximum]
|
|
|
|
|
|
@adapters.register_for('db2:ibm_db_dbi')
|
|
class DB2IBM(DB2):
|
|
drivers = ('ibm_db_dbi',)
|
|
|
|
def connector(self):
|
|
uriparts = self.ruri.split(";")
|
|
cnxn = {}
|
|
for var in uriparts:
|
|
v = var.split('=')
|
|
cnxn[v[0].lower()] = v[1]
|
|
return self.driver.connect(
|
|
cnxn['dsn'], cnxn['uid'], cnxn['pwd'], **self.driver_args)
|
|
|
|
|
|
@adapters.register_for('db2:pyodbc')
|
|
class DB2Pyodbc(DB2):
|
|
drivers = ('pyodbc',)
|
|
|
|
def connector(self):
|
|
return self.driver.connect(self.ruri, **self.driver_args)
|