@@ -516,6 +516,25 @@ async def get_connection_2():
516516 await task_2
517517
518518
519+ @pytest .mark .parametrize ("database_url" , DATABASE_URLS )
520+ @async_adapter
521+ async def test_connection_context_with_raw_connection (database_url ):
522+ """
523+ Test connection contexts with respect to the raw connection.
524+ """
525+ async with Database (database_url ) as database :
526+ async with database .connection () as connection_1 :
527+ async with database .connection () as connection_2 :
528+ assert connection_1 is connection_2
529+
530+ raw_connection_0 = await database .raw_connection ()
531+ raw_connection_1 = await connection_1 .raw_connection ()
532+ raw_connection_2 = await connection_2 .raw_connection ()
533+
534+ assert raw_connection_0 is raw_connection_1 is raw_connection_2
535+ assert raw_connection_0 is connection_1 ._connection ._connection
536+
537+
519538@pytest .mark .parametrize ("database_url" , DATABASE_URLS )
520539@async_adapter
521540async def test_queries_with_expose_backend_connection (database_url ):
@@ -525,29 +544,30 @@ async def test_queries_with_expose_backend_connection(database_url):
525544 """
526545 async with Database (database_url ) as database :
527546 async with database .transaction (force_rollback = True ):
547+ # Get the raw connection
548+ con = await database .raw_connection ()
549+
528550 # Insert query
529- if str (database_url ).startswith (' mysql' ):
551+ if str (database_url ).startswith (" mysql" ):
530552 insert_query = "INSERT INTO notes (text, completed) VALUES (%s, %s)"
531553 else :
532554 insert_query = "INSERT INTO notes (text, completed) VALUES ($1, $2)"
533555
534556 # execute()
535557 values = ("example1" , True )
536558
537- con = await database .expose_backend_connection ()
538-
539- if str (database_url ).startswith ('postgresql' ):
559+ if str (database_url ).startswith ("postgresql" ):
540560 await con .execute (insert_query , * values )
541- elif str (database_url ).startswith (' mysql' ):
561+ elif str (database_url ).startswith (" mysql" ):
542562 cursor = await con .cursor ()
543563 await cursor .execute (insert_query , values )
544- elif str (database_url ).startswith (' sqlite' ):
564+ elif str (database_url ).startswith (" sqlite" ):
545565 await con .execute (insert_query , values )
546566
547567 # execute_many()
548568 values = [("example2" , False ), ("example3" , True )]
549-
550- if str (database_url ).startswith (' mysql' ):
569+
570+ if str (database_url ).startswith (" mysql" ):
551571 cursor = await con .cursor ()
552572 await cursor .executemany (insert_query , values )
553573 else :
@@ -557,13 +577,13 @@ async def test_queries_with_expose_backend_connection(database_url):
557577 select_query = "SELECT notes.id, notes.text, notes.completed FROM notes"
558578
559579 # fetch_all()
560- if str (database_url ).startswith (' postgresql' ):
580+ if str (database_url ).startswith (" postgresql" ):
561581 results = await con .fetch (select_query )
562- elif str (database_url ).startswith (' mysql' ):
582+ elif str (database_url ).startswith (" mysql" ):
563583 cursor = await con .cursor ()
564584 await cursor .execute (select_query )
565585 results = await cursor .fetchall ()
566- elif str (database_url ).startswith (' sqlite' ):
586+ elif str (database_url ).startswith (" sqlite" ):
567587 results = await con .execute_fetchall (select_query )
568588
569589 assert len (results ) == 3
@@ -576,48 +596,13 @@ async def test_queries_with_expose_backend_connection(database_url):
576596 assert results [2 ][2 ] == True
577597
578598 # fetch_one()
579- if str (database_url ).startswith (' postgresql' ):
599+ if str (database_url ).startswith (" postgresql" ):
580600 result = await con .fetchrow (select_query )
581601 else :
582602 cursor = await con .cursor ()
583603 await cursor .execute (select_query )
584604 result = await cursor .fetchone ()
585-
605+
586606 # Raw output for the raw request
587607 assert result [1 ] == "example1"
588608 assert result [2 ] == True
589-
590-
591- @pytest .mark .parametrize ("database_url" , DATABASE_URLS )
592- @async_adapter
593- async def test_queries_with_sqlalchemy_test (database_url ):
594- """
595- Test for inserting and retriving the data using the `sqlalchemy.text` query object.
596- """
597- async with Database (database_url ) as database :
598- async with database .transaction (force_rollback = True ):
599- # Insert query
600- insert_query = "INSERT INTO notes (text, completed) VALUES (:text, :completed)"
601-
602- # execute_many()
603- query = sqlalchemy .text (insert_query )
604- values = [("example1" , True ), ("example2" , False ), ("example3" , True )]
605- for text , completed in values :
606- current_query = query .bindparams (text = text , completed = completed )
607- await database .execute (current_query )
608-
609- # Select query
610- select_query = "SELECT notes.id, notes.text, notes.completed FROM notes"
611-
612- # fetch_all()
613- query = sqlalchemy .text (select_query )
614- results = await database .fetch_all (query )
615-
616- assert len (results ) == 3
617- # Raw output for the raw request
618- assert results [0 ][1 ] == "example1"
619- assert results [0 ][2 ] == True
620- assert results [1 ][1 ] == "example2"
621- assert results [1 ][2 ] == False
622- assert results [2 ][1 ] == "example3"
623- assert results [2 ][2 ] == True
0 commit comments