我正在尝试构建一个根据查询结果构建的插入语句。我运行一个查询,从一个数据库检索结果,然后根据结果创建一条插入语句并将其插入到另一个数据库中。
最初查询的服务器仅返回回复中已填充的字段,这可能因记录而异。目标数据库表具有所有可能的可用字段。这就是为什么我需要为检索到的每条记录动态构建插入语句,以及为什么我不能使用默认字段列表,因为我无法控制在响应中填充哪些字段。
这是代码示例,我发送了一个 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 语句。
提前非常感谢。
最佳答案
您可以使用 ','.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
使用 ?
。
关于python - 在Python中为MySQL创建插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27020472/