标签: insert

使用Django将数千条记录插入SQLite表的有效方法是什么?

我必须使用Django的ORM将8000多条记录插入到SQLite数据库中.此操作需要每分钟大约运行一次cronjob.
目前我正在使用for循环迭代所有项目,然后逐个插入它们.
例:

for item in items:
    entry = Entry(a1=item.a1, a2=item.a2)
    entry.save()
Run Code Online (Sandbox Code Playgroud)

这样做的有效方法是什么?

编辑:两种插入方法之间的一点比较.

没有commit_manually装饰器(11245条记录):

nox@noxdevel marinetraffic]$ time python manage.py insrec             

real    1m50.288s
user    0m6.710s
sys     0m23.445s
Run Code Online (Sandbox Code Playgroud)

使用commit_manually decorator(11245条记录):

[nox@noxdevel marinetraffic]$ time python manage.py insrec                

real    0m18.464s
user    0m5.433s
sys     0m10.163s
Run Code Online (Sandbox Code Playgroud)

注意:除了插入数据库之外,测试脚本还执行一些其他操作(下载ZIP文件,从ZIP存档中提取XML文件,解析XML文件),因此执行所需的时间不一定代表插入所需的时间记录.

python sql sqlite django insert

67
推荐指数
2
解决办法
6万
查看次数

MySQL中的`REPLACE`和`INSERT ... ON DUPLICATE KEY UPDATE'有什么实际区别?

我需要的是使用特定键设置记录的所有字段的值(键实际上是复合键),如果没有带有这样键的记录则插入记录.

REPLACE似乎意味着要做的工作,但同时它的手册页建议 INSERT ... ON DUPLICATE KEY UPDATE.

我应该更好地选择什么?为什么?

REPLACE我想到的唯一"副作用" 是它会增加自动增量值(幸运的是我不使用任何),而INSERT ... ON DUPLICATE KEY UPDATE可能不会.要记住的其他实际差异是什么?在哪些特定情况下可以REPLACE优先考虑INSERT ... ON DUPLICATE KEY UPDATE,反之亦然?

mysql sql replace insert

67
推荐指数
3
解决办法
3万
查看次数

在 dart 中在列表的开头插入元素

我只是在 Flutter 中创建一个简单的 ToDo 应用程序。我正在管理列表中的所有待办事项。我想在列表的开头添加任何新的待办事项。我能够使用这种解决方法来实现这一目标。有没有更好的方法来做到这一点?

void _addTodoInList(BuildContext context){
    String val = _textFieldController.text;

    final newTodo = {
      "title": val,
      "id": Uuid().v4(),
      "done": false
    };

    final copiedTodos = List.from(_todos);

    _todos.removeRange(0, _todos.length);
    setState(() {
      _todos.addAll([newTodo, ...copiedTodos]);
    });

    Navigator.pop(context);
  }
Run Code Online (Sandbox Code Playgroud)

list insert dart flutter

66
推荐指数
5
解决办法
3万
查看次数

INSERTing到没有值的表的语法?

我有一个使用以下模式创建的表:

CREATE TABLE [dbo].[Visualizations]
(
    VisualizationID     int identity (1,1)      NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

由于表没有可设置的字段,我不知道如何插入记录.我试过了:

INSERT INTO [Visualizations];
INSERT INTO [Visualizations] () VALUES ();
Run Code Online (Sandbox Code Playgroud)

都没有工作.这样做的正确语法是什么?

编辑:由于很多人似乎对我的表感到困惑,因此它纯粹用于表示多个子表的父级...每个子表都用FK引用这个表,每个FK都是PK,所以在所有子表中在这些表中,ID是唯一的.

sql t-sql sql-server insert

65
推荐指数
1
解决办法
2万
查看次数

使用select为查询结果添加行

是否可以使用这样的文字扩展查询结果?

select name from users
union
select name from ('JASON');
Run Code Online (Sandbox Code Playgroud)

要么

select age, name from users
union
select age, name from (25,'Betty');
Run Code Online (Sandbox Code Playgroud)

所以它返回表中的所有名称加'JASON'或(25,'Betty').

sql t-sql sql-server select insert

64
推荐指数
3
解决办法
12万
查看次数

如何在SQL表中插入默认值?

我有这样一张桌子:

create table1 (field1 int,
               field2 int default 5557,
               field3 int default 1337, 
               field4 int default 1337)
Run Code Online (Sandbox Code Playgroud)

我想插入一个具有field2和field4默认值的行.

我已经尝试insert into table1 values (5,null,10,null)但它不起作用ISNULL(field2,default)也不起作用.

当我插入行时,如何告诉数据库使用列的默认值?

t-sql default insert

64
推荐指数
5
解决办法
14万
查看次数

对从select中取出的每一行执行插入?

我有许多记录需要插入到多个表中.每隔一列都是常数.

下面的伪代码很差 - 这就是我想要做的:

create table #temp_buildings
(
    building_id varchar(20)
)
insert into #temp_buildings (building_id) VALUES ('11070')
insert into #temp_buildings (building_id) VALUES ('11071')
insert into #temp_buildings (building_id) VALUES ('20570')
insert into #temp_buildings (building_id) VALUES ('21570')
insert into #temp_buildings (building_id) VALUES ('22570')

insert into property.portfolio_property_xref
        ( portfolio_id ,
          building_id ,
          created_date ,
          last_modified_date
        )
values
        ( 
            34 ,
            (
                select  building_id
                from    #temp_buildings
            ) ,
            getdate() ,
            null
        )
Run Code Online (Sandbox Code Playgroud)

意图:对#temp_buildings上的每条记录执行insert.portfolio_property_xref插入

我想我可以用光标做到这一点 - 但相信这会非常慢.由于这个练习将来可以重复,我宁愿用更快的方法解决这个问题,但我不确定如何.对于任何反馈,我们都表示感谢!

sql t-sql insert sql-server-2008

64
推荐指数
2
解决办法
6万
查看次数

如何将项插入键/值对对象?

好的......这是一个垒球问题......

我只需要能够将键/值对插入到特定位置的对象中.我目前正在使用Hashtable,当然,这不允许使用此功能.什么是最好的方法?

更新:此外,我确实需要能够通过密钥查找.

例如......过度简化和伪编码但应该传达这一点

// existing Hashtable
myHashtable.Add("somekey1", "somevalue1");
myHashtable.Add("somekey2", "somevalue2");
myHashtable.Add("somekey3", "somevalue3");

// Some other object that will allow me to insert a new key/value pair.
// Assume that this object has been populated with the above key/value pairs.
oSomeObject.Insert("newfirstkey","newfirstvalue");
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c# list insert

62
推荐指数
3
解决办法
16万
查看次数

由于索引,SQLite插入速度会随着记录数量的增加而减慢

原始问题

背景

众所周知,SQLite 需要经过精细调整,以实现大约50k插入/秒的插入速度.这里有很多关于缓慢插入速度和大量建议和基准的问题.

还有声称SQLite可以处理大量数据,50 GB以上的报告不会导致正确设置出现任何问题.

我已经按照这里和其他地方的建议来实现这些速度,我很高兴35k-45k插入/秒.我遇到的问题是所有的基准测试只能显示<1m记录的快速插入速度.我所看到的是插入速度似乎与表格大小成反比.

问题

我的用例要求[x_id, y_id, z_id]在链接表中存储500米到1b元组()几年(1米行/天).值均为介于1和2,000,000之间的整数ID.有一个索引z_id.

前10米行的性能非常好,约35k插入/秒,但是当表有~20m行时,性能开始下降.我现在看到大约100个插入/秒.

桌子的大小不是特别大.对于20米行,磁盘上的大小约为500MB.

该项目是用Perl编写的.

这是SQLite中大型表的现实,还是有任何保密措施来维护 > 10m行的表的高插入率?

已知的解决方法,如果可能,我想避免

  • 删除索引,添加记录和重新索引:这可以作为一种解决方法,但在更新期间仍需要使用数据库时不起作用.在x分钟/天内完全无法访问数据库是行不通的
  • 将表分成较小的子表/文件:这将在短期内起作用,我已经尝试过它.问题是我需要能够在查询时从整个历史记录中检索数据,这意味着最终我将达到62表附件限制.附加,收集临时表中的结果,并且每个请求分离数百次似乎是很多工作和开销,但如果没有其他选择,我会尝试它.
  • 设置 SQLITE_FCNTL_CHUNK_SIZE:我不知道C(?!),所以我不想仅仅为了完成这项工作而学习它.我看不到使用Perl设置此参数的任何方法.

UPDATE

蒂姆的建议,一个指数,尽管SQLite的的说法,它能够处理大型数据集导致越来越缓慢插入时间,我进行以下设置的基准进行比较:

  • 插行:1400万
  • 提交批量大小:50,000条记录
  • cache_sizepragma:10,000
  • page_size实用语:4,096
  • temp_storepragma:记忆
  • journal_modepragma:删除
  • synchronouspragma:关闭

在我的项目中,与下面的基准测试结果一样,创建了基于文件的临时表,并使用了SQLite对导入CSV数据的内置支持.然后将临时表附加到接收数据库,并使用insert-select语句插入50,000行的集合 .因此,插入时间不会将文件反映到数据库插入时间,而是反映 表到表的插入速度.考虑CSV导入时间会使速度降低25-50%(非常粗略估计,导入CSV数据不需要很长时间).

显然有一个索引会导致插入速度随着表格大小的增加而减慢.

SQLite插图速度和表大小的图

从上面的数据可以清楚地看出,正确的答案可以分配给Tim的答案,而不是SQLite无法处理它的断言.显然,如果索引该数据集不是您的用例的一部分,它可以处理大型数据集.我一直在使用SQLite作为日志记录系统的后端,暂时 …

database sqlite optimization insert

60
推荐指数
2
解决办法
2万
查看次数

MySQL错误1264:列超出范围值

正如我SET在MySQL中的表中的cust_fax一样:

cust_fax integer(10) NOT NULL,
Run Code Online (Sandbox Code Playgroud)

然后我插入这样的值:

INSERT INTO database values ('3172978990');
Run Code Online (Sandbox Code Playgroud)

但后来它说

'错误1264`超出列的值

我想知道错误在哪里?我的套装?或其他?

任何答案将不胜感激!

mysql sql integer insert

59
推荐指数
4
解决办法
23万
查看次数