将python变量从另一个游标对象插入SQLITE数据库
使用Python文档中的示例:将python变量从另一个游标对象插入SQLITE数据库,python,sqlite,Python,Sqlite,使用Python文档中的示例: 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 (?,
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的查询中生成的
由于元组是不可变的,因此如何将附加值传递给游标执行语句(除了元组之外)
有没有比下面的例子更好的解决方案
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
对于ExecuteMy版本,您还可以
c.executemany('insert into stocks (?,?,?,?,?,?)', (t + ('Arb value',) for t in stocks))
使用生成器表达式而不是列表理解将阻止您创建一个完整的新数据结构,如果您有许多输入,这是必不可少的