3
3
import psycopg
4
4
import psycopg_pool
5
5
from sqlalchemy .engine .interfaces import Dialect
6
+ from sqlalchemy .dialects .postgresql .psycopg import PGDialect_psycopg
6
7
from sqlalchemy .sql import ClauseElement
7
8
8
9
from databases .backends .common .records import Record , create_column_maps
9
- from databases .backends .dialects .psycopg import compile_query , get_dialect
10
10
from databases .core import DatabaseURL
11
11
from databases .interfaces import (
12
12
ConnectionBackend ,
@@ -29,7 +29,7 @@ def __init__(
29
29
) -> None :
30
30
self ._database_url = DatabaseURL (database_url )
31
31
self ._options = options
32
- self ._dialect = get_dialect ()
32
+ self ._dialect = PGDialect_psycopg ()
33
33
self ._pool = None
34
34
35
35
async def connect (self ) -> None :
@@ -86,7 +86,7 @@ async def fetch_all(self, query: ClauseElement) -> typing.List[RecordInterface]:
86
86
if self ._connection is None :
87
87
raise RuntimeError ("Connection is not acquired" )
88
88
89
- query_str , args , result_columns = compile_query ( query , self ._dialect )
89
+ query_str , args , result_columns = self ._compile ( query )
90
90
91
91
async with self ._connection .cursor () as cursor :
92
92
await cursor .execute (query_str , args )
@@ -99,7 +99,7 @@ async def fetch_one(self, query: ClauseElement) -> typing.Optional[RecordInterfa
99
99
if self ._connection is None :
100
100
raise RuntimeError ("Connection is not acquired" )
101
101
102
- query_str , args , result_columns = compile_query ( query , self ._dialect )
102
+ query_str , args , result_columns = self ._compile ( query )
103
103
104
104
async with self ._connection .cursor () as cursor :
105
105
await cursor .execute (query_str , args )
@@ -125,7 +125,7 @@ async def execute(self, query: ClauseElement) -> typing.Any:
125
125
if self ._connection is None :
126
126
raise RuntimeError ("Connection is not acquired" )
127
127
128
- query_str , args , _ = compile_query ( query , self ._dialect )
128
+ query_str , args , _ = self ._compile ( query )
129
129
130
130
async with self ._connection .cursor () as cursor :
131
131
await cursor .execute (query_str , args )
@@ -141,7 +141,7 @@ async def iterate(
141
141
if self ._connection is None :
142
142
raise RuntimeError ("Connection is not acquired" )
143
143
144
- query_str , args , result_columns = compile_query ( query , self ._dialect )
144
+ query_str , args , result_columns = self ._compile ( query )
145
145
column_maps = create_column_maps (result_columns )
146
146
147
147
async with self ._connection .cursor () as cursor :
@@ -164,6 +164,17 @@ def raw_connection(self) -> typing.Any:
164
164
raise RuntimeError ("Connection is not acquired" )
165
165
return self ._connection
166
166
167
+ def _compile (
168
+ self , query : ClauseElement ,
169
+ ) -> typing .Tuple [str , typing .Mapping [str , typing .Any ], tuple ]:
170
+ compiled = query .compile (dialect = self ._dialect )
171
+
172
+ compiled_query = compiled .string
173
+ params = compiled .params
174
+ result_map = compiled ._result_columns
175
+
176
+ return compiled_query , params , result_map
177
+
167
178
168
179
class PsycopgTransaction (TransactionBackend ):
169
180
_connecttion : PsycopgConnection
0 commit comments