diff options
| author | Federico Caselli <cfederico87@gmail.com> | 2021-01-12 22:14:38 +0100 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-01-19 10:35:02 -0500 |
| commit | 442ca5c000aab9faa69d514e7902c9d903cbd987 (patch) | |
| tree | c99190377db66a82dabdbddd544f65ccc34d8e2d /test/dialect/postgresql | |
| parent | b060ed8b4818d9a74d630ac1292386a500f4825c (diff) | |
| download | sqlalchemy-442ca5c000aab9faa69d514e7902c9d903cbd987.tar.gz | |
Disallow non-native psycopg2 Unicode in Python 3; update docs
Fixed issue where the psycopg2 dialect would silently pass the
``use_native_unicode=False`` flag without actually having any effect under
Python 3, as the psycopg2 DBAPI uses Unicode unconditionally under Python
3. This usage now raises an :class:`_exc.ArgumentError` when used under
Python 3. Added test support for Python 2.
Additionally, added documentation for client_encoding parameter
that may be passed to libpq directly via psycopg2.
Change-Id: I40ddf6382c157fa9399c21f0e01064197ea100f8
Diffstat (limited to 'test/dialect/postgresql')
| -rw-r--r-- | test/dialect/postgresql/test_dialect.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/dialect/postgresql/test_dialect.py b/test/dialect/postgresql/test_dialect.py index 08be41b75..075994cb9 100644 --- a/test/dialect/postgresql/test_dialect.py +++ b/test/dialect/postgresql/test_dialect.py @@ -114,6 +114,26 @@ class DialectTest(fixtures.TestBase): ]: eq_(dialect._get_server_version_info(mock_conn(string)), version) + @testing.requires.python3 + @testing.requires.psycopg2_compatibility + def test_pg_dialect_no_native_unicode_in_python3(self, testing_engine): + with testing.expect_raises_message( + exc.ArgumentError, + "psycopg2 native_unicode mode is required under Python 3", + ): + testing_engine(options=dict(use_native_unicode=False)) + + @testing.requires.python2 + @testing.requires.psycopg2_compatibility + def test_pg_dialect_no_native_unicode_in_python2(self, testing_engine): + e = testing_engine(options=dict(use_native_unicode=False)) + with e.connect() as conn: + eq_( + conn.exec_driver_sql(u"SELECT 'đ voix mâa rĂ©veillĂ©'").scalar(), + u"đ voix mâa rĂ©veillĂ©".encode("utf-8"), + ) + + @testing.requires.python2 @testing.requires.psycopg2_compatibility def test_pg_dialect_use_native_unicode_from_config(self): config = { |
