def _get_options_with_defaults(url): user_options = url.translate_connect_args(username='******', password='******', database='exaschema', host='destination') user_options.update(url.query) options = {key.lower(): value for (key, value) in DEFAULT_CONNECTION_PARAMS.items()} options.update({key.lower(): value for (key, value) in DEFAULT_TURBODBC_PARAMS.items()}) for key in user_options.keys(): options[key.lower()] = user_options[key] real_turbodbc = __import__('turbodbc') turbodbc_options = {} for param in ('read_buffer_size', 'parameter_sets_to_buffer', 'use_async_io'): if param in options: raw = options.pop(param) if param == 'use_async_io': value = util.asbool(raw) elif param == 'read_buffer_size': value = real_turbodbc.Megabytes(util.asint(raw)) else: value = util.asint(raw) turbodbc_options[param] = value options['turbodbc_options'] = real_turbodbc.make_options(**turbodbc_options) return options
def _get_options_with_defaults(url): user_options = url.translate_connect_args(username='******', password='******', database='exaschema', host='destination') user_options.update(url.query) options = {key.lower(): value for (key, value) in DEFAULT_CONNECTION_PARAMS.items()} options.update({key.lower(): value for (key, value) in DEFAULT_TURBODBC_PARAMS.items()}) for key in user_options.keys(): options[key.lower()] = user_options[key] real_turbodbc = __import__('turbodbc') turbodbc_options = {} for param in TURBODBC_TRANSLATED_PARAMS: if param in options: raw = options.pop(param) if param in {'use_async_io', 'prefer_unicode', 'large_decimals_as_64_bit_types', 'limit_varchar_results_to_max', 'autocommit'}: value = util.asbool(raw) elif param == 'read_buffer_size': value = real_turbodbc.Megabytes(util.asint(raw)) else: value = util.asint(raw) turbodbc_options[param] = value options['turbodbc_options'] = real_turbodbc.make_options(**turbodbc_options) return options
def create_connect_args(self, url): """Create the connect args for Turbodbc. Some code adapted from the Pyodbc connector in the SQLAlchemy codebase. """ options = url.translate_connect_args(username='******') query = url.query options.update(query) connect_args = {} # first get the Turbodbc specific options turbodbc_options = {} for param in ('read_buffer_size', 'parameter_sets_to_buffer', 'use_async_io', 'autocommit', 'large_decimals_as_64_bit_types'): if param in options: raw = options.pop(param) if param in ('use_async_io', 'autocommit', 'large_decimals_as_64_bit_types'): value = util.asbool(raw) else: value = util.asint(raw) turbodbc_options[param] = value # we always need to set prefer_unicode=True for MSSQL + Turbodbc connect_args['turbodbc_options'] = make_options(prefer_unicode=True, **turbodbc_options) for param in ('ansi', 'unicode_results'): if param in options: connect_args[param] = util.asbool(options.pop(param)) dsn_connection = 'dsn' in options or \ ('host' in options and 'database' not in options) if dsn_connection: dsn = [options.pop('host', '') or options.pop('dsn', '')] else: dsn = [] port = '' if 'port' in options and 'port' not in query: port = int(options.pop('port')) driver = options.pop('driver', None) if driver is None: util.warn( "No driver name specified; " "this is expected by ODBC when using " "DSN-less connections") else: connect_args['driver'] = driver connect_args.update( server=(options.pop('host', '')), port=port, database=options.pop('database', '') ) user = options.pop('user', None) if user: connect_args.update( uid=user, pwd=options.pop('password', '') ) else: connect_args['trusted_connection'] = 'Yes' return [dsn, connect_args]