summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing/provision.py
diff options
context:
space:
mode:
authorTony Locke <tlocke@tlocke.org.uk>2020-08-02 15:19:26 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2020-08-18 11:12:16 -0400
commit06f1929b866abc2af0ff5c838e472a8b1c98d6e6 (patch)
tree9f71fcea759c2c7a5012486d053355488782bcb8 /lib/sqlalchemy/testing/provision.py
parentbd61d19a1c2f5d70131ed09eee69198f75d3ac44 (diff)
downloadsqlalchemy-06f1929b866abc2af0ff5c838e472a8b1c98d6e6.tar.gz
Update dialect for pg8000 version 1.16.0
The pg8000 dialect has been revised and modernized for the most recent version of the pg8000 driver for PostgreSQL. Changes to the dialect include: * All data types are now sent as text rather than binary. * Using adapters, custom types can be plugged in to pg8000. * Previously, named prepared statements were used for all statements. Now unnamed prepared statements are used by default, and named prepared statements can be used explicitly by calling the Connection.prepare() method, which returns a PreparedStatement object. Pull request courtesy Tony Locke. Notes by Mike: to get this all working it was needed to break up JSONIndexType into "str" and "int" subtypes; this will be needed for any dialect that is dependent on setinputsizes(). also includes @caselit's idea to include query params in the dbdriver parameter. Co-authored-by: Mike Bayer <mike_mp@zzzcomputing.com> Closes: #5451 Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/5451 Pull-request-sha: 639751ca9c7544801b9ede02e6cbe15a16c59c82 Change-Id: I2869bc52c330916773a41d11d12c297aecc8fcd8
Diffstat (limited to 'lib/sqlalchemy/testing/provision.py')
-rw-r--r--lib/sqlalchemy/testing/provision.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/lib/sqlalchemy/testing/provision.py b/lib/sqlalchemy/testing/provision.py
index 21bacfca2..094d1ea94 100644
--- a/lib/sqlalchemy/testing/provision.py
+++ b/lib/sqlalchemy/testing/provision.py
@@ -7,6 +7,7 @@ from . import engines
from .. import exc
from ..engine import url as sa_url
from ..util import compat
+from ..util import parse_qsl
log = logging.getLogger(__name__)
@@ -85,7 +86,7 @@ def generate_db_urls(db_urls, extra_drivers):
--dburi postgresql://db1 \
--dburi postgresql://db2 \
--dburi postgresql://db2 \
- --dbdriver=psycopg2 --dbdriver=asyncpg
+ --dbdriver=psycopg2 --dbdriver=asyncpg?async_fallback=true
Noting that the default postgresql driver is psycopg2. the output
would be::
@@ -139,21 +140,34 @@ def _generate_driver_urls(url, extra_drivers):
main_driver = url.get_driver_name()
extra_drivers.discard(main_driver)
- url = generate_driver_url(url, main_driver)
+ url = generate_driver_url(url, main_driver, {})
yield str(url)
for drv in list(extra_drivers):
- new_url = generate_driver_url(url, drv)
+
+ if "?" in drv:
+
+ driver_only, query_str = drv.split("?", 1)
+
+ query = parse_qsl(query_str)
+ else:
+ driver_only = drv
+ query = {}
+
+ new_url = generate_driver_url(url, driver_only, query)
if new_url:
extra_drivers.remove(drv)
+
yield str(new_url)
@register.init
-def generate_driver_url(url, driver):
+def generate_driver_url(url, driver, query):
backend = url.get_backend_name()
new_url = copy.copy(url)
+ new_url.query = dict(new_url.query)
new_url.drivername = "%s+%s" % (backend, driver)
+ new_url.query.update(query)
try:
new_url.get_dialect()
except exc.NoSuchModuleError: