4
4
5
5
import aiosqlite
6
6
from sqlalchemy .dialects .sqlite import pysqlite
7
+ from sqlalchemy .engine .cursor import CursorResultMetaData
7
8
from sqlalchemy .engine .interfaces import Dialect , ExecutionContext
8
- from sqlalchemy .engine .result import ResultMetaData , RowProxy
9
+ from sqlalchemy .engine .result import Row
9
10
from sqlalchemy .sql import ClauseElement
10
11
from sqlalchemy .sql .ddl import DDLElement
11
- from sqlalchemy .types import TypeEngine
12
12
13
13
from databases .core import LOG_EXTRA , DatabaseURL
14
14
from databases .interfaces import ConnectionBackend , DatabaseBackend , TransactionBackend
@@ -92,9 +92,15 @@ async def fetch_all(self, query: ClauseElement) -> typing.List[typing.Mapping]:
92
92
93
93
async with self ._connection .execute (query , args ) as cursor :
94
94
rows = await cursor .fetchall ()
95
- metadata = ResultMetaData (context , cursor .description )
95
+ metadata = CursorResultMetaData (context , cursor .description )
96
96
return [
97
- RowProxy (metadata , row , metadata ._processors , metadata ._keymap )
97
+ Row (
98
+ metadata ,
99
+ metadata ._processors ,
100
+ metadata ._keymap ,
101
+ Row ._default_key_style ,
102
+ row ,
103
+ )
98
104
for row in rows
99
105
]
100
106
@@ -106,8 +112,14 @@ async def fetch_one(self, query: ClauseElement) -> typing.Optional[typing.Mappin
106
112
row = await cursor .fetchone ()
107
113
if row is None :
108
114
return None
109
- metadata = ResultMetaData (context , cursor .description )
110
- return RowProxy (metadata , row , metadata ._processors , metadata ._keymap )
115
+ metadata = CursorResultMetaData (context , cursor .description )
116
+ return Row (
117
+ metadata ,
118
+ metadata ._processors ,
119
+ metadata ._keymap ,
120
+ Row ._default_key_style ,
121
+ row ,
122
+ )
111
123
112
124
async def execute (self , query : ClauseElement ) -> typing .Any :
113
125
assert self ._connection is not None , "Connection is not acquired"
@@ -129,9 +141,15 @@ async def iterate(
129
141
assert self ._connection is not None , "Connection is not acquired"
130
142
query , args , context = self ._compile (query )
131
143
async with self ._connection .execute (query , args ) as cursor :
132
- metadata = ResultMetaData (context , cursor .description )
144
+ metadata = CursorResultMetaData (context , cursor .description )
133
145
async for row in cursor :
134
- yield RowProxy (metadata , row , metadata ._processors , metadata ._keymap )
146
+ yield Row (
147
+ metadata ,
148
+ metadata ._processors ,
149
+ metadata ._keymap ,
150
+ Row ._default_key_style ,
151
+ row ,
152
+ )
135
153
136
154
def transaction (self ) -> TransactionBackend :
137
155
return SQLiteTransaction (self )
@@ -158,6 +176,7 @@ def _compile(
158
176
compiled ._result_columns ,
159
177
compiled ._ordered_columns ,
160
178
compiled ._textual_ordered_columns ,
179
+ compiled ._loose_column_name_matching ,
161
180
)
162
181
163
182
query_message = compiled .string .replace (" \n " , " " ).replace ("\n " , " " )
0 commit comments