创建 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 个列名——我不能手动做这个。
我需要的:
- 我需要自动生成占位符
%s
一样
Pandas DataFrame 中列数的次数。
在这里,DataFrame 有 2 列,所以我需要一种自动的方式来
生成 %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])
但这不起作用。
有没有办法让我自动生成这个字符串?
这是我想出的 - 它基于原始 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 部分。
出于某种原因,它不会让我在一行中完成所有这些,我不明白为什么。
我希望使用基于 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 个列名——我不能手动做这个。
我需要的:
- 我需要自动生成占位符
%s
一样 Pandas DataFrame 中列数的次数。 在这里,DataFrame 有 2 列,所以我需要一种自动的方式来 生成%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])
但这不起作用。
有没有办法让我自动生成这个字符串?
这是我想出的 - 它基于原始 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 部分。
出于某种原因,它不会让我在一行中完成所有这些,我不明白为什么。