【发布时间】:2020-09-07 09:02:42
【问题描述】:
我正在尝试在 python 中创建一个方法,将记录插入到一个表中,传递一个列名列表和一个关联的记录列表。
我能够将它设置在通过 for 循环动态填充列名的位置,但我无法弄清楚如何对值执行相同的操作,因为 psycopg2.executemany 函数依赖于将 %s 作为占位符。
是否可以通过循环动态填充字符串中 %s 的数量?有没有其他方法可以做到这一点?
def load_table(dbname,table_name,fields,records):
try:
#Variable Qty Column Loop
sql_fields = []
for i in fields:
i = sql.Identifier(i)
sql_fields.append(i)
#Need similar loop to replace %s values
#Replace (%s,%s,%s) ???
#.....
#.....
sql_values = []
for i in fields:
sql_values.append('%s')
print(sql_values)
flist = sql.SQL(',').join(sql_fields)
connection, cursor = create_connection(dbname)
insert_query = sql.SQL('INSERT INTO {table_name} ({fields}) VALUES (%s,%s,%s)').format(
table_name = sql.Identifier(table_name),
fields = flist,
cursor.executemany(insert_query,records)
print('Records Loaded Successfully')
except (Exception,psycopg2.Error) as error:
print("Failed to insert record into table {error}".format(error = error))
finally:
# closing database connection.
if (connection):
close_connection(connection,cursor)
【问题讨论】:
标签: python sql dynamic formatting psycopg2