在python中进行一个insert查询

2024-09-30 00:36:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为template_list数组中的值创建一个插入查询。这些值用于字段template_name。在

dir_template_list = ['template1', 'template2', 'template3']
sql = "INSERT INTO tbltemplate (template_name) VALUES(%s)" % (dir_template_list)

有没有使用字符串占位符创建此查询的简单/简单方法?在

^{pr2}$

编辑:这是我实际的表结构

FIELD   
-------
id             int(6)         
template_name  VARCHAR(128) 

Tags: 方法字符串namesqldirtemplate数组list
3条回答

正如ThiefMaster指出的,您永远不应该使用来自用户的输入来构建带有字符串格式的SQL查询。这是一个SQL注入漏洞,也是当今软件系统中的首要安全问题。在

您的数据库提供了一种安全的方法来分别提供查询字符串和数据,您应该使用它:

dir_template_list = ['template1', 'template2', 'template3']
sql = "INSERT INTO tbltemplate (template_name) VALUES(?, ?, ?)"
conn.execute(sql, *dir_template_list)

注意:我不知道您的数据库连接被称为什么,但是conn是常见的。另外,不同的数据库对占位符使用不同的语法:?和{}都是可能的。在

首先,永远不要使用字符串格式来创建查询否则您将面临SQL注入漏洞的风险,必须处理转义等问题

正确的方法是对每一行使用单个查询并将数据作为参数传递:

sql = "INSERT INTO tbltemplate (template_name) VALUES (%s)"
for template in dir_template_list:
    conn.query(sql, (template,))

为了提高性能,您可能需要在事务中或使用准备好的语句执行此操作。在

如果一行有3列,则代码应该如下所示(如果表存在):

import sqlite3
dir_template_list = ['template1', 'template2', 'template3']
con = sqlite3.connect(":memory:")
sql = "INSERT INTO tbltemplate (template_name) VALUES(?, ?, ?)"
con.execute(sql, dir_template_list)

相关问题 更多 >

    热门问题