David began playing organized soccer at age ten with Ottawa club Gloucester Dragons SA. A year later he joined Ottawa Gloucester SC, where he would play for the club's Hornets team until 2015. In 2016, he joined Ottawa Internationals SC.
Gent
In January 2018, David joined Belgian side Gent. He made his professional debut on August 4, 2018 against Zulte Waregem and scored a goal in stoppage to time to salvage a 1–1 draw. Just five days after his league debut, David came in as a second-half substitute in a Europa League Third Round Qualifier against Jagiellonia Białystok, scoring a goal in the 85th minute to secure a 1–0 win for his team. David continued his scoring streak three days later, coming in as a 71st minute substitute and scoring two late goals to secure a 4–1 league win against Waasland-Beveren. After scoring five goals in his first five games, Gent signed David to a contract extension through 2022. He further extended his contract by a year to 2023 in September 2019. In the January 2020 transfer window, Gent chairman Ivan de Witte indicated there was significant interest in David from bigger clubs, with his value estimated at €20 million.
International career
Youth
David was first identified by the Canadian youth national team program in 2015 after attending several under-15 camps and was regularly called up to Canada U-17 camps in the lead-up to the 2017 CONCACAF U-17 Championship. David subsequently represented Canada at the tournament and scored a brace against Suriname in the final group game. In May 2018, David was called up to the Canadian Under-23 team for the 2018 Toulon Tournament. David received a call-up to United States U-20 team by Tab Ramos. He declined the invitation to focus on his club career, and because his desire was to represent Canada.
Senior
David received his first senior call up to Canada on August 30, 2018 for a CONCACAF Nations League qualifier against the U.S. Virgin Islands. He made his senior debut in the match on September 9, starting and netting a brace in an 8–0 victory. David was named to the final squad for the 2019 CONCACAF Gold Cup on May 30, 2019. In Canada's final group game during the tournament against Cuba, he scored a hat-trick in a 7–0 win. Despite Canada's elimination to Haiti in the quarter-finals, David would finish the tournament as the Golden Boot winner with six goals. After Canada's 6–0 victory over Cuba on September 7, 2019, David set the record for most Canada senior international goals in a single year with eight in 2019. For his efforts, he was named the 2019 Canadian Men's Player of the Year.