Django n'utilise pas ? pour le paramétrage, il utilise plutôt des paramètres de style de chaîne de format, c'est-à-dire '%s' % 'hello' , etc. Voir Passer des paramètres dans raw [Documents Django]
.
Il semble que vous vouliez faire une requête de la forme LIKE '<SOMETHING>%' , premièrement n'utilisez pas ? (utilisez %s à la place), suivant au lieu d'essayer de concaténer dans la requête concaténer en python lui-même.
Par conséquent, votre requête devrait ressembler à (parties non pertinentes tronquées) :
cursor.execute("SELECT ... a.gene_name LIKE %s ORDER BY ...", ('{}%'.format(gene),))