I'm currently following some quick start tutorials in grpc adding a bit with database connections, and obviously creating a database connection every request is not optimal
def connection():
conn = psycopg2.connect(
user="postgres", password="some_password", database="some_db")
return conn
class LeagueGameManager(start_pb2_grpc.GameManagerServicer):
async def CreateLGGame(self, request, context):
try:
conn = connection()
cursor = conn.cursor()
cursor.execute("some sql statement")
conn.commit()
cursor.close()
conn.close()
except OperationalError as e:
context.set_details(e)
context.set_code(grpc.StatusCode.INTERNAL)
cursor.close()
conn.close()
return
return start_pb2.GameReply(json_response=json.dumps(new_row[0]))
async def serve():
server = grpc.aio.server()
start_pb2_grpc.add_GameManagerServicer_to_server(
LeagueGameManager(), server)
listen_addr = '[::]:50051'
server.add_insecure_port(listen_addr)
logging.info("Starting server on %s", listen_addr)
await server.start()
await server.wait_for_termination()
what is the optimal way of managing a database connection above?