1

J'essaye d'améliorer ce code pour le rendre plus efficace dans Python 3.6.De la liste au tuple

row est une liste (il vient du lecteur csv)

sql = "CREATE TABLE %s (%s)" % (tablename,", ".join([ "%s text" % column for column in row ])) 

Je ne suis pas sûr que ce soit la meilleure façon d'aller, mais jusqu'à présent, je suis en mesure d'améliorer le code en remplaçant les deux premiers %s mais pas le troisième.

query = 'CREATE TABLE {0} ({1})' 
sql = query.format(tablename, ", ".join([ "%s text" % column for column in row ])) 

Est-il possible de remplacer le troisième %s? Est-ce que l'utilisation du format est la meilleure façon de faire?

+2

vous voulez dire '" {} text ".format (colonne) pour column in row'? –

+2

Il est * extrêmement * peu probable qu'il s'agisse d'une inefficacité significative pour votre programme. –

+0

Je doute que le formatage de chaîne soit votre goulot d'étranglement dans un tel cas. Si vous voulez améliorer les performances, regardez dans 'multiprocessing' ou recherchez le client SQL' async' – Pythonist

Répondre

1

Bien sûr, c'est possible.

sql = "CREATE TABLE {0} ({1})".format(tablename, 
             ','.join(["{} text".format(column) for column in row]) 

Généralement c'est une question de préférence personnelle. Pour ma part, je préfère toujours utiliser format sur la syntaxe de formatage c-style.

0

pas sûr qu'il est beaucoup plus rapide mais en utilisant map dans join est possible ici, ce qui évite la compréhension de la liste et ne nécessite pas lambda soit:

", ".join(map("{} text".format,row)) 
0

Vous pouvez écrire que:

sql = "CREATE TABLE %s (%s text)" % (tablename, " text, ".join(row)) 

Remarque:text est nécessaire pour le nom de la dernière colonne.

0

Vous avez dit que vous utilisez Python 3.6 afin que vous puissiez utiliser le 3.6 f-strings (ils fonctionnent comme format) pour le rendre plus rapide et plus court.

Pour votre exemple:

columns = ", ".join([f"{column} text" for column in row]) 
query = f'CREATE TABLE {tablename} ({columns})' 

Notez que cette façon de faire des requêtes SQL vous rend vulnérable à SQL-injection. Vous devriez probablement utiliser des instructions préparées au lieu de la mise en forme pour créer des requêtes.


Ils sont plus rapides que % ou format, mais il est peu probable que cela accélérer considérablement votre place de programme. Normalement, la mise en forme de chaîne n'est pas le goulot d'étranglement.