python - 在Python中为MySQL创建插入语句

标签 python mysql database

我正在尝试构建一个根据查询结果构建的插入语句。我运行一个查询,从一个数据库检索结果,然后根据结果创建一条插入语句并将其插入到另一个数据库中。

最初查询的服务器仅返回回复中已填充的字段,这可能因记录而异。目标数据库表具有所有可能的可用字段。这就是为什么我需要为检索到的每条记录动态构建插入语句,以及为什么我不能使用默认字段列表,因为我无法控制在响应中填充哪些字段。

这是代码示例,我发送了一个 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/

相关文章:

database - 为什么唯一值很少的列上的索引无效?

mysql - 建议 SQL 查询从邻接列表模型中检索所有叶节点

python - 如何将数据帧转换为 json 字符串并对这个字符串应用一些转换?

python - pandas:根据时间序列数据中的索引查找最新值

mysql - 在sql中使用以下命令从表中获取值

mysql - 为什么每次我在 Wp_options 中编辑一行时,我的网站都会变成空白?

python - 对 numpy 数组中的不同列进行过滤和求和

python - 如何根据另一个数组中的重复值添加一个数组中的值?

mysql - 如何选择不属于用户组的用户结果集

ruby-on-rails - 如何将 Postgres 数据库添加到现有的 Rails 项目