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

时间:2015-03-11 22:33:09

标签: string list python-2.7 tuples placeholder

我希望使用基于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])

在此示例中,我仅使用了两个列名称 - 'firstname''lastname'。但我必须循环这个,因为我有156个列名 - 我不能手动执行此操作。

我需要什么:

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

    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])
    

    但这不起作用。

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

1 个答案:

答案 0 :(得分:0)

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

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部分。

出于某种原因,它不会让我在一行中完成这一切,我无法弄清楚原因。