插入行时,我发现 APSW(Python 的 SQLite 解析器)存在以下问题。
假设我的数据是 data = [[1,2],[3,4]]
APSW 和 SQLite3 允许我执行以下操作:
apsw.executemany("INSERT INTO Table VALUES(?,?)", b)
Run Code Online (Sandbox Code Playgroud)
或者我可以编写一些代码来执行以下操作:
sql = "BEGIN TRANSACTION;
INSERT INTO Table Values('1','2');
INERT INTO Table Values('3','4');
COMMINT;"
apsw.execute(sql)
Run Code Online (Sandbox Code Playgroud)
当data是一个长列表/数组/表时,第一种方法的性能与第二种方法相比非常慢(对于 400 行,它可以是 20 秒,而小于 1!)。我不明白为什么会这样,因为这是所有 SQLite Python 教程中显示的将数据添加到表中的方法。
知道这里可能发生什么吗?
我可以使用 VBA 和 range.autofill 方法轻松地在 Excel 上用公式填充列:
Range("A2").AutoFill Destination:=Range("A2:A10"), Type:=xlFillDefault
Run Code Online (Sandbox Code Playgroud)
这将采用单元格 A2(或范围)上的公式/内容并将其扩展到 A10。
查看 MSDN 帮助我看到:https ://msdn.microsoft.com/en-us/library/office/ff195345.aspx
以及:https ://msdn.microsoft.com/en-us/library/office/ff838605.aspx
在 xlwings 上我可以这样做:
import xlwings as xw
rp = xw.Book(myFile)
rp.sheets('mySheet').range('A2').api.autofill(range, 0)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何通过range。我不能简单地输入“A2:A10”,我需要传递一个范围对象。
我试图这样做:rp.sheets('mySheet').range('A2').api.autofill(rp.sheets('mySheet').range('A2:A10'), 0)但这简直让Python崩溃了!
有任何想法吗?谢谢!