当前位置: 首页 > 知识库问答 >
问题:

Sqlite executemany或union select可减少数据库写入

吕征
2023-03-14

在向表中插入多行时,我试图减少对Sqlite数据库的写入次数。

到目前为止,我已经找到了两种方法,使用联合选择语句或使用sqlite3中的可执行命令。

executemany通过一次写入工作吗?

作为参考,请参阅我使用的以下声明(union select):

INSERT INTO table1
SELECT "hello" AS field1, 15 AS field2, 1262340000 AS timestamp 
UNION SELECT "byebye", 10, 1262340000 
UNION SELECT "hi", 20, 1262340000 
UNION SELECT "boo", 25, 1262340000 

更新

我知道从安全角度来看,通过字符串连接构建SQL语句非常糟糕,但在这种情况下,数据库所有者也是数据提供者,因此可以忽略SQL注入问题。

这是针对Python2.7的

sqlite3版本2.6.0

共有1个答案

慕河
2023-03-14

当事务提交时,SQLite将数据从其页面缓存刷新到磁盘。因此,您只需将所有插入放入一个事务中:

BEGIN;
INSERT INTO table1 VALUES('hello', 15, 1262340000);
INSERT INTO table1 VALUES('byebye', 10, 1262340000);
INSERT INTO table1 VALUES('hi', 20, 1262340000);
INSERT INTO table1 VALUES('boo', 25, 1262340000);
COMMIT;

Python会自动在你的背后插入事务,所以你可以只使用一堆execute()s或executemany()

data = [('hello', 15, 1262340000),
        ('byebye', 10, 1262340000),
        ('hi', 20, 1262340000),
        ('boo', 25, 1262340000)]
con.executemany("INSERT INTO table1 VALUES(?, ?, ?);", data)
con.commit()
 类似资料:
  • 问题内容: 更新:db-wal文件太大了。是什么原因,如何限制sqlite日志文件的大小? 我正在使用SQLiteOpenHelper。当发生onUpgrade时,我将删除我的应用程序中存在的每个表。当我使用设置应用程序查看应用程序数据大小时,在机器人上,您可以看到数据大小会减小。但是使用HTC Thunderbolt时,数据大小不会减少。更糟糕的是,当您再次开始使用我的应用程序时,Thunder

  • 我有几个输入需要基本上相同的代码行,只是在数据库中的不同位置进行了更改(由列A决定)。有没有办法创建一个简单的循环来最小化我必须使用的手动代码量? 提前谢谢!

  • 本文向大家介绍Kafka 分区数可以增加或减少吗?为什么?相关面试题,主要包含被问及Kafka 分区数可以增加或减少吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 我们可以使用 bin/kafka-topics.sh 命令对 Kafka 增加 Kafka 的分区数据,但是 Kafka 不支持减少分区数。 Kafka 分区数据不支持减少是由很多原因的,比如减少的分区其数据放到哪里去?是删除,

  • SqliteOpenHelper只是一个工具,是SQL世界和OOP之间的一个通道。我们要新建几个类来请求已经保存在数据库中的数据,和保存新的数据。被定义的类会使用ForecastDbHelper和DataMapper来转换数据库中的数据到domain models。我仍旧使用默认值的方式来实现简单的依赖注入: class ForecastDb( val forecastDbHelper:

  • 在Spark中有几个优化可以减少批处理的时间。这些可以在优化指南中作了讨论。这节重点讨论几个重要的。 数据接收的并行水平 通过网络(如kafka,flume,socket等)接收数据需要这些数据反序列化并被保存到Spark中。如果数据接收成为系统的瓶颈,就要考虑并行地接收数据。注意,每个输入DStream创建一个receiver(运行在worker机器上) 接收单个数据流。创建多个输入DStrea

  • 问题内容: 如果我有一个不经常更改(一个月一次)的MySQL表,其中包含诸如Web服务的活动用户帐户之类的信息。做这样的事情有多安全: 之所以这样做,是因为我必须检查用户是否对每个允许访问Web服务的请求都有一个活动帐户。这将使我避免对每个请求进行一次对数据库层的SQL调用(此刻正在强调)。我的问题是在生产中存储这样的数据有多安全? 顺便说一句,每当通过API调用添加新用户帐户时,我都会刷新帐户列