FEAT: Change default ODBC driver to v18 with v17 fallback and logging#493
FEAT: Change default ODBC driver to v18 with v17 fallback and logging#493bewithgaurav wants to merge 2 commits intodevfrom
Conversation
bewithgaurav
commented
Feb 6, 2026
- Change default driver from 'ODBC Driver 17' to 'ODBC Driver 18'
- Add automatic fallback to v17 if v18 driver is not found
- Add warning log when fallback occurs with security recommendations
- Refactor connection string building into separate method
- Change default driver from 'ODBC Driver 17' to 'ODBC Driver 18' - Add automatic fallback to v17 if v18 driver is not found - Add warning log when fallback occurs with security recommendations - Refactor connection string building into separate method
- Add test_base.py with 45 tests covering: - encode_value() - encode_connection_string() - prepare_token_for_odbc() - handle_datetimeoffset() - DatabaseWrapper._is_driver_not_found_error() - Add extras_require[test] with unittest-xml-reporting for Python 3.12+
f27ac64 to
bb3b6a0
Compare
|
|
||
| def test_simple_connection_string(self): | ||
| """Test basic connection string encoding.""" | ||
| fields = {'DRIVER': 'ODBC Driver 18 for SQL Server', 'SERVER': 'localhost'} |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| fields = {'DRIVER': 'ODBC Driver 18 for SQL Server', 'SERVER': 'localhost'} | ||
| result = encode_connection_string(fields) | ||
| self.assertIn('DRIVER=ODBC Driver 18 for SQL Server', result) | ||
| self.assertIn('SERVER=localhost', result) |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| """Test with multiple fields.""" | ||
| fields = { | ||
| 'DRIVER': 'ODBC Driver 18 for SQL Server', | ||
| 'SERVER': 'localhost', |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| """Test basic connection string building.""" | ||
| conn_params = { | ||
| 'NAME': 'testdb', | ||
| 'HOST': 'localhost', |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| result = self.wrapper._build_connection_string(conn_params, driver) | ||
|
|
||
| self.assertIn('DRIVER=ODBC Driver 18 for SQL Server', result) | ||
| self.assertIn('SERVER=localhost', result) |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| result = self.wrapper._build_connection_string(conn_params, driver) | ||
|
|
||
| # Microsoft drivers use comma for port | ||
| self.assertIn('SERVER=localhost,1433', result) |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| """Test connection string with DSN.""" | ||
| conn_params = { | ||
| 'NAME': 'testdb', | ||
| 'HOST': 'localhost', |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| """Test connection string with trusted connection (no user/password).""" | ||
| conn_params = { | ||
| 'NAME': 'testdb', | ||
| 'HOST': 'localhost', |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| """Test connection string with extra parameters.""" | ||
| conn_params = { | ||
| 'NAME': 'testdb', | ||
| 'HOST': 'localhost', |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test
| """Test that PASSWORD is not included with ActiveDirectoryInteractive auth.""" | ||
| conn_params = { | ||
| 'NAME': 'testdb', | ||
| 'HOST': 'localhost', |
Check notice
Code scanning / devskim
Accessing localhost could indicate debug code, or could hinder scaling. Note test