【问题标题】:Python + SQLite: Bind list of tuplesPython + SQLite:绑定元组列表
【发布时间】:2013-05-11 12:26:17
【问题描述】:

我有一个只有一个参数的插入语句

INSERT OR IGNORE INTO sample (descr) VALUES (?);

我有一个元组列表

[(a,b), (c,d)]

现在我正在使用

cur.executemany(query, listOfTuples)

Python 不喜欢接收 2 个参数,只需要 1 个。 用此语句绑定元组中所有第一个值的最佳方法是什么?

我尝试过类似的东西

cur.executemany(query, listOfTuples[0])

但现在 Python 认为我给了它 4 个参数。

【问题讨论】:

    标签: python sqlite list python-3.x tuples


    【解决方案1】:

    使用列表推导仅选择第一个值;使用切片创建长度为 1 的新元组:

    cur.executemany(query, [t[:1] for t in listOfTuples])
    

    显示列表理解结果的快速演示:

    >>> listOfTuples = [('a', 'b'), ('c', 'd')]
    >>> [t[:1] for t in listOfTuples]
    [('a',), ('c',)]
    

    您还可以使用生成器表达式,动态创建元组切片:

    cur.executemany(query, (t[:1] for t in listOfTuples))
    

    可能不是所有的数据库 API 都支持可迭代对象,而是希望得到一些有长度的东西。

    【讨论】:

    • 就这么简单...这会在内存中创建一个新变量吗?或者这是 listOfTuples 上的内存引用。
    • @Terence:它创建了一个新列表和新元组。您也可以使用生成器表达式,可能
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2021-07-22
    • 2015-10-11
    相关资源
    最近更新 更多