Django nie używa ? do parametryzacji używa raczej parametrów stylu ciągu formatującego, tj. '%s' % 'hello' itp. Zobacz Przekazywanie parametrów do raw [Dokumentacja Django]
.
Wygląda na to, że chcesz wykonać zapytanie w postaci LIKE '<SOMETHING>%' , po pierwsze nie używaj ? (użyj %s zamiast tego), następnie zamiast próbować łączyć w zapytaniu łączyć w pythonie się.
Dlatego zapytanie powinno wyglądać tak:(Obcięte nieistotne części):
cursor.execute("SELECT ... a.gene_name LIKE %s ORDER BY ...", ('{}%'.format(gene),))