We imported the dbapi functions from the PyODBC dialect but these could be memoized like https://github.com/sqlalchemy/sqlalchemy/blob/fb81f9c8d914f9911925dd3f4e77d7fc374b267c/lib/sqlalchemy/dialects/postgresql/pg8000.py#L397
AFAICT, these functions are not actually used since we more care about the driver version than the PyODBC version, though it's possible that we may need to care if there's a bug that needs to be worked around in PyODBC. Since we don't inherit from PyODBC dialect, it's probably better to rename these to something more specific like _pyodbc_version and we could inline the _parse_dbapi_version.
In addition, the _get_driver_version could be replaced with a memoized property as well, eg. _driver_version.
We imported the dbapi functions from the PyODBC dialect but these could be memoized like https://github.com/sqlalchemy/sqlalchemy/blob/fb81f9c8d914f9911925dd3f4e77d7fc374b267c/lib/sqlalchemy/dialects/postgresql/pg8000.py#L397
AFAICT, these functions are not actually used since we more care about the driver version than the PyODBC version, though it's possible that we may need to care if there's a bug that needs to be worked around in PyODBC. Since we don't inherit from PyODBC dialect, it's probably better to rename these to something more specific like _pyodbc_version and we could inline the _parse_dbapi_version.
In addition, the _get_driver_version could be replaced with a memoized property as well, eg.
_driver_version.