diff options
author | Gord Thompson <gord@gordthompson.com> | 2019-10-20 11:04:51 -0400 |
---|---|---|
committer | sqla-tester <sqla-tester@sqlalchemy.org> | 2019-10-20 11:04:51 -0400 |
commit | 8ebc3ebffcd5d06ae9edc6d80a6e943d3499ea14 (patch) | |
tree | eff2ceb255466ace87a7f174aafffb00a0a9aca6 /lib/sqlalchemy/dialects/mysql/pyodbc.py | |
parent | 7859fb6ff073d10c92083b1d50d021442e783875 (diff) | |
download | sqlalchemy-8ebc3ebffcd5d06ae9edc6d80a6e943d3499ea14.tar.gz |
add on_connect to MySQLDialect_pyodbc
Fixes: #4876
<!-- Provide a general summary of your proposed changes in the Title field above -->
### Description
add on_connect to MySQLDialect_pyodbc to specify Unicode encoding/decoding settings for the pyodbc connection
### Checklist
<!-- go over following points. check them with an `x` if they do apply, (they turn into clickable checkboxes once the PR is submitted, so no need to do everything at once)
-->
This pull request is:
- [ ] A documentation / typographical error fix
- Good to go, no issue or tests are needed
- [x] A short code fix
- please include the issue number, and create an issue if none exists, which
must include a complete example of the issue. one line code fixes without an
issue and demonstration will not be accepted.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests. one line code fixes without tests will not be accepted.
- [ ] A new feature implementation
- please include the issue number, and create an issue if none exists, which must
include a complete example of how the feature would look.
- Please include: `Fixes: #<issue number>` in the commit message
- please include tests.
**Have a nice day!**
Closes: #4885
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/4885
Pull-request-sha: 58f6176331702b72f3ea8342c93be6fe9a3db26f
Change-Id: If05c1cf8fb1d8efebcf809bdefe40242118d763f
Diffstat (limited to 'lib/sqlalchemy/dialects/mysql/pyodbc.py')
-rw-r--r-- | lib/sqlalchemy/dialects/mysql/pyodbc.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/pyodbc.py b/lib/sqlalchemy/dialects/mysql/pyodbc.py index 6866c3f42..9a18b5090 100644 --- a/lib/sqlalchemy/dialects/mysql/pyodbc.py +++ b/lib/sqlalchemy/dialects/mysql/pyodbc.py @@ -23,6 +23,7 @@ """ import re +import sys from .base import MySQLDialect from .base import MySQLExecutionContext @@ -86,5 +87,28 @@ class MySQLDialect_pyodbc(PyODBCConnector, MySQLDialect): else: return None + def on_connect(self): + super_ = super(MySQLDialect_pyodbc, self).on_connect() + + def on_connect(conn): + if super_ is not None: + super_(conn) + + # declare Unicode encoding for pyodbc as per + # https://github.com/mkleehammer/pyodbc/wiki/Unicode + pyodbc_SQL_CHAR = 1 # pyodbc.SQL_CHAR + pyodbc_SQL_WCHAR = -8 # pyodbc.SQL_WCHAR + if sys.version_info.major > 2: + conn.setdecoding(pyodbc_SQL_CHAR, encoding='utf-8') + conn.setdecoding(pyodbc_SQL_WCHAR, encoding='utf-8') + conn.setencoding(encoding='utf-8') + else: + conn.setdecoding(pyodbc_SQL_CHAR, encoding='utf-8') + conn.setdecoding(pyodbc_SQL_WCHAR, encoding='utf-8') + conn.setencoding(str, encoding='utf-8') + conn.setencoding(unicode, encoding='utf-8') + + return on_connect + dialect = MySQLDialect_pyodbc |