![](/img/trans.png)
[英]Python - Instantiate object from SQLite cursor
[英]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.