我正在尝试改进此code以使其在Python 3.6中更有效。
row
是一个列表(来自csv
读者)
sql = "CREATE TABLE %s (%s)" % (tablename,", ".join([ "%s text" % column for column in row ]))
我不确定这是否是最好的方法,但到目前为止我能够通过替换前两个%s
而不是第三个来改进代码。
query = 'CREATE TABLE {0} ({1})'
sql = query.format(tablename, ", ".join([ "%s text" % column for column in row ]))
是否可以替换第三个%s
?使用格式是最好的方法吗?
答案 0 :(得分:1)
当然,这是可能的。
sql = "CREATE TABLE {0} ({1})".format(tablename,
','.join(["{} text".format(column) for column in row])
大多数情况下,这是个人偏好的问题。就我而言,我总是喜欢使用format
而不是c风格的格式化语法。
答案 1 :(得分:0)
不确定它的速度要快得多,但在join
中使用lambda
是可行的,这样可以避免列表理解,并且不需要", ".join(map("{} text".format,row))
:< / p>
Product
答案 2 :(得分:0)
你可以写成:
sql = "CREATE TABLE %s (%s text)" % (tablename, " text, ".join(row))
注意:最后一列名称需要 text
。
答案 3 :(得分:0)
你说你正在使用Python 3.6,所以你可以使用3.6 f-strings(它们像format
一样工作)使其更快 1 更短。
对于你的例子:
columns = ", ".join([f"{column} text" for column in row])
query = f'CREATE TABLE {tablename} ({columns})'
请注意,这种进行SQL查询的方式使您容易受到SQL-injection的攻击。您可能应该使用预准备语句而不是格式化来创建查询。
1 它们比%
或format
快,但它不太可能显着加快您的程序速度。通常字符串格式化不是瓶颈。