在Python中为MySQL创建插入语句

时间:2014-11-19 15:21:41

标签: python mysql database

我正在尝试构造一个根据查询结果构建的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语句。

提前多多感谢。

1 个答案:

答案 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使用?,例如。