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

String 创建Python字符串占位符(%s)n次,string,list,python-2.7,tuples,placeholder,String,List,Python 2.7,Tuples,Placeholder,我希望在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']) # Cre

我希望在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个列名——我无法手动完成这项工作

我需要的是:

  • 我需要自动生成相同的占位符
    %s
    数据帧中列数的次数。 在这里,DataFrame有两列,因此我需要一种自动方式 生成
    %s
    两次
  • 然后我需要创建一个包含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])
    
    但这是行不通的


    有没有一种方法可以让我自动生成这个字符串?

    以下是我的想法——它基于dwanderson在原始帖子第二条评论中的方法(问题):

    这样,最后一个字符串在第2/2部分中


    由于某种原因,它不允许我在一行中完成所有这些,我也不知道为什么。

    我不太清楚您的尝试应该如何与上面的内容相匹配:上面,您有
    (firstname,lastname)
    ,但是在您的尝试中,看起来您只是想要
    (%s,%s)
    ,尽管您使用的是
    len(df)
    这会给你一个数字。。。您想要列名,还是想要文字
    %s
    ?但在任何情况下,如果您只想要
    %s
    占位符,我们可以首先构建该字符串:
    placeholder=“,”。join([%s]*len(df))
    ,然后
    添加_SQL=“插入到表中的名称(%s)值(%s)”%(占位符,占位符)
    。如果您确实需要列名和值,请创建两个初始字符串:
    column\u names=“,”。连接(列)
    values=“,”。连接(值)
    并适当地使用它们而不是占位符,其中
    columns
    values
    是您周围的列表(
    values=元组列表[i]
    ).关于你的部分解决方案,我在下面贴了一个回复作为“答案”,但仍然有一个问题,因为我似乎无法在一行中得到你的确切布局。请参阅下面的帖子(“答案”),并让我知道您在下面的评论中的想法。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