From 89ab2b929244e925edeed46382c155e23de065a9 Mon Sep 17 00:00:00 2001 From: PrettyWood Date: Mon, 15 Mar 2021 22:33:21 +0100 Subject: [PATCH] fix: support sqlalchemy 1.4 --- databases/backends/aiopg.py | 13 ++++++++----- databases/backends/mysql.py | 13 ++++++++----- databases/backends/sqlite.py | 13 ++++++++----- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/databases/backends/aiopg.py b/databases/backends/aiopg.py index 2fecb1b5..24fb53f9 100644 --- a/databases/backends/aiopg.py +++ b/databases/backends/aiopg.py @@ -8,10 +8,13 @@ from aiopg.sa.engine import APGCompiler_psycopg2 from sqlalchemy.dialects.postgresql.psycopg2 import PGDialect_psycopg2 from sqlalchemy.engine.interfaces import Dialect, ExecutionContext -from sqlalchemy.engine.result import ResultMetaData, RowProxy +from sqlalchemy.engine.result import ResultMetaData +try: + from sqlalchemy.engine.result import Row +except ImportError: # pragma: no cover + from sqlalchemy.engine.result import RowProxy as Row from sqlalchemy.sql import ClauseElement from sqlalchemy.sql.ddl import DDLElement -from sqlalchemy.types import TypeEngine from databases.core import DatabaseURL from databases.interfaces import ConnectionBackend, DatabaseBackend, TransactionBackend @@ -121,7 +124,7 @@ async def fetch_all(self, query: ClauseElement) -> typing.List[typing.Mapping]: rows = await cursor.fetchall() metadata = ResultMetaData(context, cursor.description) return [ - RowProxy(metadata, row, metadata._processors, metadata._keymap) + Row(metadata, row, metadata._processors, metadata._keymap) for row in rows ] finally: @@ -137,7 +140,7 @@ async def fetch_one(self, query: ClauseElement) -> typing.Optional[typing.Mappin if row is None: return None metadata = ResultMetaData(context, cursor.description) - return RowProxy(metadata, row, metadata._processors, metadata._keymap) + return Row(metadata, row, metadata._processors, metadata._keymap) finally: cursor.close() @@ -171,7 +174,7 @@ async def iterate( await cursor.execute(query, args) metadata = ResultMetaData(context, cursor.description) async for row in cursor: - yield RowProxy(metadata, row, metadata._processors, metadata._keymap) + yield Row(metadata, row, metadata._processors, metadata._keymap) finally: cursor.close() diff --git a/databases/backends/mysql.py b/databases/backends/mysql.py index b6476add..05bbbb2a 100644 --- a/databases/backends/mysql.py +++ b/databases/backends/mysql.py @@ -6,10 +6,13 @@ import aiomysql from sqlalchemy.dialects.mysql import pymysql from sqlalchemy.engine.interfaces import Dialect, ExecutionContext -from sqlalchemy.engine.result import ResultMetaData, RowProxy +from sqlalchemy.engine.result import ResultMetaData +try: + from sqlalchemy.engine.result import Row +except ImportError: # pragma: no cover + from sqlalchemy.engine.result import RowProxy as Row from sqlalchemy.sql import ClauseElement from sqlalchemy.sql.ddl import DDLElement -from sqlalchemy.types import TypeEngine from databases.core import LOG_EXTRA, DatabaseURL from databases.interfaces import ConnectionBackend, DatabaseBackend, TransactionBackend @@ -109,7 +112,7 @@ async def fetch_all(self, query: ClauseElement) -> typing.List[typing.Mapping]: rows = await cursor.fetchall() metadata = ResultMetaData(context, cursor.description) return [ - RowProxy(metadata, row, metadata._processors, metadata._keymap) + Row(metadata, row, metadata._processors, metadata._keymap) for row in rows ] finally: @@ -125,7 +128,7 @@ async def fetch_one(self, query: ClauseElement) -> typing.Optional[typing.Mappin if row is None: return None metadata = ResultMetaData(context, cursor.description) - return RowProxy(metadata, row, metadata._processors, metadata._keymap) + return Row(metadata, row, metadata._processors, metadata._keymap) finally: await cursor.close() @@ -161,7 +164,7 @@ async def iterate( await cursor.execute(query, args) metadata = ResultMetaData(context, cursor.description) async for row in cursor: - yield RowProxy(metadata, row, metadata._processors, metadata._keymap) + yield Row(metadata, row, metadata._processors, metadata._keymap) finally: await cursor.close() diff --git a/databases/backends/sqlite.py b/databases/backends/sqlite.py index 28ceb6fb..c361e745 100644 --- a/databases/backends/sqlite.py +++ b/databases/backends/sqlite.py @@ -5,10 +5,13 @@ import aiosqlite from sqlalchemy.dialects.sqlite import pysqlite from sqlalchemy.engine.interfaces import Dialect, ExecutionContext -from sqlalchemy.engine.result import ResultMetaData, RowProxy +from sqlalchemy.engine.result import ResultMetaData +try: + from sqlalchemy.engine.result import Row +except ImportError: # pragma: no cover + from sqlalchemy.engine.result import RowProxy as Row from sqlalchemy.sql import ClauseElement from sqlalchemy.sql.ddl import DDLElement -from sqlalchemy.types import TypeEngine from databases.core import LOG_EXTRA, DatabaseURL from databases.interfaces import ConnectionBackend, DatabaseBackend, TransactionBackend @@ -94,7 +97,7 @@ async def fetch_all(self, query: ClauseElement) -> typing.List[typing.Mapping]: rows = await cursor.fetchall() metadata = ResultMetaData(context, cursor.description) return [ - RowProxy(metadata, row, metadata._processors, metadata._keymap) + Row(metadata, row, metadata._processors, metadata._keymap) for row in rows ] @@ -107,7 +110,7 @@ async def fetch_one(self, query: ClauseElement) -> typing.Optional[typing.Mappin if row is None: return None metadata = ResultMetaData(context, cursor.description) - return RowProxy(metadata, row, metadata._processors, metadata._keymap) + return Row(metadata, row, metadata._processors, metadata._keymap) async def execute(self, query: ClauseElement) -> typing.Any: assert self._connection is not None, "Connection is not acquired" @@ -131,7 +134,7 @@ async def iterate( async with self._connection.execute(query, args) as cursor: metadata = ResultMetaData(context, cursor.description) async for row in cursor: - yield RowProxy(metadata, row, metadata._processors, metadata._keymap) + yield Row(metadata, row, metadata._processors, metadata._keymap) def transaction(self) -> TransactionBackend: return SQLiteTransaction(self)