创建 Python 字符串占位符 (%s) n 次

Create Python string placeholder (%s) n times

我希望使用基于 Pandas DataFrame 中的列数的循环在 Python 2.7 中自动生成以下字符串:

INSERT INTO table_name (firstname, lastname) VALUES (534737, 100.115)

这假设 DataFrame 有 2 列。

这是我的:

# Generate test numbers for table:
df = pd.DataFrame(np.random.rand(5,2), columns=['firstname','lastname'])

# Create list of tuples from numbers in each row of DataFrame:
list_of_tuples = [tuple(x) for x in df.values]

现在,我创建字符串: 手动 - 这有效:

add_SQL = INSERT INTO table_name (firstname, lastname) VALUES %s" % (list_of_tuples[4])

在这个例子中,我只使用了 2 个列名 - 'firstname''lastname'。但是我必须用一个循环来做这个,因为我有 156 个列名——我不能手动做这个。

我需要的:

  1. 我需要自动生成占位符%s一样 Pandas DataFrame 中列数的次数。 在这里,DataFrame 有 2 列,所以我需要一种自动的方式来 生成 %s 两次。
  2. 然后我需要创建一个包含 2 个条目的元组, 没有 ''.

我的尝试:

sss = ['%s' for x in range(0,len(list(df)))]
add_SQL = "INSERT INTO table_name (" + sss + ") VALUES %s" % (len(df), list_of_tuples[4])

但这不起作用。

有没有办法让我自动生成这个字符串?

这是我想出的 - 它基于原始 post(问题)的第二条评论中 dwanderson 的方法:

table_name = name_a #name of table

# Loop through all columns of dataframe and generate one string per column:
cols_n = df.columns.tolist()
placeholder = ",".join(["%s"]*df.shape[1]) #df.shape[1] gives # of columns
column_names = ",".join(cols_n)
insrt = "INSERT INTO %s " % table_name
for qrt in range(0,df.shape[0]):
   add_SQL_a_1 = insrt + "(" + column_names + ") VALUES (" + placeholder + ")" #part 1/2
   add_SQL_a_2 = add_SQL_a_1 % list_of_tuples[qrt] #part 2/2

这样,最后的字符串在第 2/2 部分。

出于某种原因,它不会让我在一行中完成所有这些,我不明白为什么。