33import psycopg
44import psycopg_pool
55from sqlalchemy .engine .interfaces import Dialect
6+ from sqlalchemy .dialects .postgresql .psycopg import PGDialect_psycopg
67from sqlalchemy .sql import ClauseElement
78
89from databases .backends .common .records import Record , create_column_maps
9- from databases .backends .dialects .psycopg import compile_query , get_dialect
1010from databases .core import DatabaseURL
1111from databases .interfaces import (
1212 ConnectionBackend ,
@@ -29,7 +29,7 @@ def __init__(
2929 ) -> None :
3030 self ._database_url = DatabaseURL (database_url )
3131 self ._options = options
32- self ._dialect = get_dialect ()
32+ self ._dialect = PGDialect_psycopg ()
3333 self ._pool = None
3434
3535 async def connect (self ) -> None :
@@ -86,7 +86,7 @@ async def fetch_all(self, query: ClauseElement) -> typing.List[RecordInterface]:
8686 if self ._connection is None :
8787 raise RuntimeError ("Connection is not acquired" )
8888
89- query_str , args , result_columns = compile_query ( query , self ._dialect )
89+ query_str , args , result_columns = self ._compile ( query )
9090
9191 async with self ._connection .cursor () as cursor :
9292 await cursor .execute (query_str , args )
@@ -99,7 +99,7 @@ async def fetch_one(self, query: ClauseElement) -> typing.Optional[RecordInterfa
9999 if self ._connection is None :
100100 raise RuntimeError ("Connection is not acquired" )
101101
102- query_str , args , result_columns = compile_query ( query , self ._dialect )
102+ query_str , args , result_columns = self ._compile ( query )
103103
104104 async with self ._connection .cursor () as cursor :
105105 await cursor .execute (query_str , args )
@@ -125,7 +125,7 @@ async def execute(self, query: ClauseElement) -> typing.Any:
125125 if self ._connection is None :
126126 raise RuntimeError ("Connection is not acquired" )
127127
128- query_str , args , _ = compile_query ( query , self ._dialect )
128+ query_str , args , _ = self ._compile ( query )
129129
130130 async with self ._connection .cursor () as cursor :
131131 await cursor .execute (query_str , args )
@@ -141,7 +141,7 @@ async def iterate(
141141 if self ._connection is None :
142142 raise RuntimeError ("Connection is not acquired" )
143143
144- query_str , args , result_columns = compile_query ( query , self ._dialect )
144+ query_str , args , result_columns = self ._compile ( query )
145145 column_maps = create_column_maps (result_columns )
146146
147147 async with self ._connection .cursor () as cursor :
@@ -164,6 +164,17 @@ def raw_connection(self) -> typing.Any:
164164 raise RuntimeError ("Connection is not acquired" )
165165 return self ._connection
166166
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+
167178
168179class PsycopgTransaction (TransactionBackend ):
169180 _connecttion : PsycopgConnection
0 commit comments