1

これを改良して、codeをPython 3.6でより効率的にするようにしています。リストからタプル

rowは、(それがcsvリーダーから来る)

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

私は、これは行くための最善の方法であるかどうかわからないのですが、これまでのところ、私は最初の2を交換することにより、コードを改善することができたリストです。 %sではなく、3番目のものではありません。

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

第3の%sを交換することはできますか?フォーマットを使用するのが最善の方法ですか?

+2

あなたは列の行 '' {} text ".format(列)を意味しますか? –

+2

これはあなたのプログラムにとって非常に非効率的なことはほとんどありません。 –

+0

このような場合に文字列のフォーマットがボトルネックになるかどうかは疑問です。 パフォーマンスを向上させたい場合は、 'マルチプロセッシング'を調べるか、 'async' SQLクライアント – Pythonist

答えて

1

もちろん、可能です。

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

ほとんど個人的な好みの質問です。私は、常に、Cスタイルの書式構文よりもformatを使用することを好みます。

0

それははるかに高速だがjoinmapを使用すると、リストの内包を回避し、lambdaのいずれかを必要としない、ここでは可能であることを確認していない:

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

あなたのように書くことができます。

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

注:最後の列名にはtextが必要です。

0

あなたはそうあなたはそれがより速くと短くする(彼らはformatのように働く)3.6 f-stringsを使用することができますは、Python 3.6を使用していると述べました。ご例えば

:SQLクエリを作成するこの方法は、SQL-injectionにあなたが脆弱になりますことを

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

注意。おそらく、式を作成する代わりに準備済みの文を使用して、クエリを作成する必要があります。


彼らは%またはformatよりも高速ですが、それはそれは非常にあなたのプログラムの起動を高速化する可能性は低いです。通常、文字列のフォーマットはボトルネックではありません。

関連する問題