动态创建占位符以在SQLite表中插入多列值

0 投票
1 回答
2923 浏览
提问于 2025-04-18 04:48

我知道在SQLite数据库中,可以通过一个包含多个值的元组,比如('2006-03-28', 'BUY', 'IBM', 1000, 45.00),以及一个对应的占位符(?, ?, ?, ?, ?)来插入很多列的值。我在程序中动态创建这些值的元组,可能会有多达300个值。我想知道有没有一种安全的方法(能防止SQL注入攻击)来动态生成与查询字符串对应的占位符元组字符串(?, ?, ?, ...)?我问这个是因为在开发过程中,随着数据库结构和数值元组的变化,我不想麻烦地去数、添加或删除?。谢谢你的想法。

1 个回答

0

根据你在values中的项目数量来构建一个字符串,比如:

def place_holder(values):
    return '({})'.format(', '.join('?' * len(values)))

values = ['a', 'b', 'c']
ph = place_holder(values)
# (?, ?, ?)

然后像这样:

your_cursor.execute('insert into your_table values {}'.format(ph), values)

如果它不符合你的结构要求,你就会遇到问题,不过那是另一个话题……

撰写回答