从列表到元组
From list to tuple
我正在尝试改进这个 code 以使其在 Python 3.6 中更有效率。
row
是一个列表(它来自csv
reader)
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
?使用格式是最好的方法吗?
当然可以。
sql = "CREATE TABLE {0} ({1})".format(tablename,
','.join(["{} text".format(column) for column in row])
主要是个人喜好问题。一方面,我总是更喜欢使用 format
而不是 c 风格的格式化语法。
不确定它是否快得多,但是在这里可以在 join
中使用 map
,这避免了列表理解并且不需要 lambda
:
", ".join(map("{} text".format,row))
你可以这样写:
sql = "CREATE TABLE %s (%s text)" % (tablename, " text, ".join(row))
注意:最后一列名称需要text
。
您说您使用的是 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
快,但它不太可能显着加快您的程序速度。通常字符串格式不是瓶颈。
我正在尝试改进这个 code 以使其在 Python 3.6 中更有效率。
row
是一个列表(它来自csv
reader)
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
?使用格式是最好的方法吗?
当然可以。
sql = "CREATE TABLE {0} ({1})".format(tablename,
','.join(["{} text".format(column) for column in row])
主要是个人喜好问题。一方面,我总是更喜欢使用 format
而不是 c 风格的格式化语法。
不确定它是否快得多,但是在这里可以在 join
中使用 map
,这避免了列表理解并且不需要 lambda
:
", ".join(map("{} text".format,row))
你可以这样写:
sql = "CREATE TABLE %s (%s text)" % (tablename, " text, ".join(row))
注意:最后一列名称需要text
。
您说您使用的是 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
快,但它不太可能显着加快您的程序速度。通常字符串格式不是瓶颈。