繁体   English   中英

从另一个游标对象将python变量插入SQLITE DB

[英]Insert python variables into SQLITE DB from another cursor object

使用Python DOC中的示例:

stocks = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
          ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
          ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
         ]: 
for t in stocks
    c.execute('insert into stocks values (?,?,?,?,?)', t)

在我的代码中,上面的股票是通过查询到另一个DB生成的。

由于元组是不可变的,因此您如何将其他值(除元组之外)传递给游标execute语句。

有没有比下面的示例更好的解决方案?:

stocks = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
          ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
          ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
         ]: 
for t in stocks
    t = list(t)
    t.append('Some Arb Value')
    t = tuple(t)
    c.execute('insert into stocks values (?,?,?,?,?,?)', t)

您也可以这样做:

stocks = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
          ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
          ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
         ]: 
for t in stocks
    c.execute('insert into stocks values (?,?,?,?,?,?)', (t[0],t[1],t[2],t[3],t[4],'some value')

但是,上述解决方案不适用于executemany方法,即

c.executemany('insert into stocks values (?,?,?,?,?,?)', t)

有更好的方法吗?

元组是不可变的,但您可以轻松提取其内容并形成新的元组。 另外,我不确定,但我认为execute()调用绝对不必具有元组。 包括列表在内的任何序列都不能正常工作吗?

无论如何,这是您需要的:

for t in stocks:
    c.execute('insert into stock values (?,?,?,?,?,?)', t + ('some value',))

这将在现有的元组中添加一个元组,从而形成一个新的六元组。

我假设您打算在executemany版本中使用stocks而不是t对于执行版本,您也可以

c.executemany('insert into stocks (?,?,?,?,?,?)', (t + ('Arb value',) for t in stocks))

使用生成器表达式而不是列表推导将使您无法创建全新的数据结构,如果您有很多输入,这是必不可少的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM