【发布时间】:2018-07-27 16:27:49
【问题描述】:
我有这个插入 SQL 数据库的 python 函数。该脚本是这样的,每次重新运行时,除了新行之外,它还必须再次插入同一行。最终我会改变它,让它只插入新行,但现在我必须使用某种更新语句。
我知道我可以在 SQL Server 中使用 MERGE 来实现类似于 MySQL 的 ON DUPLICATE KEY UPDATE 的功能,但我不确定应该如何使用它。欢迎任何建议。谢谢!
def sqlInsrt(headers, values):
#create string input of mylisth
strheaders = ','.join(str(i) for i in headers)
#create string ? param's for INSERT clause
placestr = ','.join(i for i in ["?" for i in headers])
#create string ? param's for UPDATE clause
replacestr = ', '.join(['{}=?'.format(h) for h in headers])
#Setup and execute SQL query
insert = ("INSERT INTO "+part+" ("+strheaders+") VALUES ("+placestr+")")
cursor.execute(insert, values)
cnx.commit()
【问题讨论】:
-
placestr = ",".join("?" for i in headers). -
传递给
execute的语句是什么? -
通过我的编辑,该语句只是一个 INSERT。 'part' 变量未在函数中定义,但它控制数据将插入到哪个表中。 'strheaders' 和 'placestr' 是要插入的值的标题和参数占位符
-
这是一个等待发生的漏洞。您将列名直接包含在 SQL 中。有人会过来并将用户输入作为列名直接传递给这个函数。
-
嗯,我是作为公司实习生写的,它只会在内部服务器上使用,整个应用程序处理的信息是公共信息。所有这些都可以在我从中清理数据的某个网站上找到。