首页 > 解决方案 > Python sqlite3占位符,用于任意长度值的元组

问题描述

我有一个包含 6 列的表和一个长度为 6 的元组,我想插入它。代码示例如下所示:

values = ('1', 'foo', 'bar', 'egg', 'spam', 'qwe')
cursor.execute(
    '''
    INSERT INTO customers VALUES (?, ?, ?, ?, ?, ?)
    ''',
    values
)

但是,我非常不喜欢?在查询正文中写 6 次的想法。我正在寻找一种方法来做这样的事情:

values = ('1', 'foo', 'bar', 'egg', 'spam', 'qwe')
cursor.execute(
    '''
    INSERT INTO customers VALUES (?*)
    ''',
    values
)

当然,为了避免写?6 次,我可以使用这样的字符串格式:

values = ('1', 'foo', 'bar', 'egg', 'spam', 'qwe')
cursor.execute(
    '''
    INSERT INTO customers VALUES {}
    '''.format(values)
)

但它是不安全的。我发现的最佳选择是计算所需的数量?(在回答重复目标时提出的类似建议):

values = ('1', 'foo', 'bar', 'egg', 'spam', 'qwe')
cursor.execute(
    '''
    INSERT INTO customers VALUES ({})
    '''.format(', '.join('?' for _ in values)),
    values
)

但我希望可以有更优雅的方式来实现这一点,例如,像?*我上面写的那样。有这样的功能吗?

标签: pythonsqlite

解决方案


推荐阅读