我正在尝试构造一个根据查询结果构建的insert语句。我运行一个查询从一个数据库中检索结果,然后从结果中创建一个insert语句并将其插入到另一个数据库中。
最初查询的服务器仅返回已填充的回复中的那些字段,这可能因记录而异。目标数据库表具有所有可用的可用字段。这就是为什么我需要动态为每个检索的记录构造insert语句以及为什么我不能使用默认的字段列表,因为我无法控制响应中将填充哪些字段。
以下是代码示例,我发送了针对isin的T& C请求,响应是名称和值。
fields = []
data = []
getTCQ = ("MDH:T&C|"+isin+"|NAME|VALUE")
mdh.execute(getTCQ)
TC = mdh.fetchall()
for values in TC:
fields.append(values[0])
data.append(values[1])
insertQ = ("INSERT INTO sp_fields ("+fields+") VALUES ('"+data+"')")
问题在于字段部分,mysql期待以下内容:
INSERT INTO sp_fields (ACCRUAL_COUNT,AMOUNT_OUTSTANDING_CALC_DATE) VALUES ('030/360','2014-11-10')
但是我为insertQ获得了以下内容:
INSERT INTO sp_fields ('ACCRUAL_COUNT','AMOUNT_OUTSTANDING_CALC_DATE') VALUES ('030/360','2014-11-10')
和mysql不喜欢' '在田野名称周围。
我如何摆脱这些?所以它看起来像第一个有效的insertQ语句。
提前多多感谢。答案 0 :(得分:1)
您可以使用','.join(fields)
创建所需的字符串(每个字段周围没有引号)。
然后使用参数化sql并将值作为第二个参数传递给cursor.execute
:
insertQ = ("INSERT INTO sp_fields ({}) VALUES ({})".format(
','.join(fields), ','.join(['%s']*len(dates)))
cursor.execute(insertQ, dates)
请注意使用正确的地标,例如%s
取决于您使用的数据库适配器。 MySQLdb使用%s
,但oursql
使用?
,例如。