String 创建Python字符串占位符(%s)n次
我希望在Python 2.7中使用基于数据帧中列数的循环自动生成以下字符串: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
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
两次”
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