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

时间:2014-04-29 19:53:25

标签: python sql sqlite dynamic tuples

我知道可以使用值为('2006-03-28', 'BUY', 'IBM', 1000, 45.00)元组的变量和查询字符串中相应的占位符(?, ?, ?, ?, ?)在SQLite数据库中插入许多列值。我在程序中动态创建值元组,它们可以容纳~300个值。我想知道是否有一个安全的(关于SQL注入攻击)方式动态生成相应的查询字符串的占位符元组字符串(?, ?, ?, ...)?我要求这样做,以避免繁琐的计数,添加和删除?,因为我的数据库结构和值元组在整个开发过程中都会发生变化。谢谢你的想法。

1 个答案:

答案 0 :(得分: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)

如果它不符合您的架构,您将遇到问题,但这是另一个问题......