Tag: sqlite3

如果数据库大小大于2千兆字节,SQLite性能会降低吗?

去年,当我在他们的网站上查询SQLite时,build议的SQLite数据库大小是2千兆字节。 但现在,我再也找不到这个build议了。 那么有没有人试图使用最新版本的大于2GB的SQLite数据库呢? SQLiteperformance如何? PS:我想制作一个移动应用程序,需要在本地工作的大数据库(例如存储维基百科文章)。

什么SQLite使用nodejs

我正在开发应用程序使用node.js 在这我愿意使用SQLite作为embedded式数据库。 我在网上searchSQLite NPM模块。 我发现了各种模块: https://github.com/grumdrig/node-sqlite https://github.com/orlandov/node-sqlite https://github.com/developmentseed/node-sqlite3 从文档和其他来源,我了解到(1)同步运行,(2)和(3)asynchronous运行。 所以,我放弃了使用(1)的计划。 现在我想知道(2)和(3)之间有什么区别,哪一个应该是首选? 我GOOGLE了很多,但找不到很多的帮助。

我如何安装sqlite3到Python?

有人可以告诉我如何安装sqlite3包到最新版本的Python? 我使用Macbook,并在命令行上尝试: pip install sqlite 但popup一个错误。

Sqlite3,OperationalError:无法打开数据库文件

问题:为什么我不能打开数据库? 信息:我正在做一个项目,其目的不重要,但使用sqlite3数据库。 我做了一个testing程序,运行并传递给它一个数据库的位置: /tmp/cer/could.db 和unit testing程序可以使数据库没有问题。 然后我去实际使用该程序,传递相同的位置,它说 OperationalError:无法打开数据库文件 我试着用一个空的数据库来做这件事。 数据库的unit testing留下了,根本没有数据库。 在所有三种情况下,我得到这个错误。 最令人沮丧的部分是unit testing可以做得很好,但实际的程序不能。 任何线索到底是怎么回事?

在Python和sqlite中转义字符

我有一个python脚本读取原始电影文本文件到sqlite数据库。 我使用re.escape(title)在执行插入操作之前将转义字符添加到string中以使它们安全。 为什么这不起作用: In [16]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='\'Allo\ \'Allo\!\"\ \(1982\)'") ————————————————————————— OperationalError Traceback (most recent call last) /home/rajat/Dropbox/amdb/<ipython console> in <module>() OperationalError: near "Allo": syntax error 然而,这工作(删除两个地方): In [17]: c.execute("UPDATE movies SET rating = '8.7' WHERE name='Allo\ Allo\!\"\ \(1982\)'") Out[17]: <sqlite3.Cursor object at 0x9666e90> 我无法弄清楚。 我也不能排除那些引号,因为他们实际上是电影片名的一部分。 谢谢。

SQLite查询中的CASE语句

为什么这个查询不起作用? :(我尝试replace嵌套的IF语句“… SET lkey = IF(lkey> = 11,lkey – 5,IF(lkey> 5,lkey + 2,lkey))” UPDATE pages SET lkey = CASE lkey WHEN lkey >= 11 THEN lkey – 5 ELSE CASE lkey WHEN lkey > 5 THEN lkey + 2 ELSE lkey END END, rkey = CASE lkey WHEN lkey >= 11 THEN rkey – 5 […]

如果我不closuresPython SQLite中的数据库连接,该怎么办?

我正在做这样的事情… conn = sqlite3.connect(db_filename) with conn: cur = conn.cursor() cur.execute( … ) with自动提交更改。 但是文档没有提到closures连接。 其实我可以在后面的陈述中使用conn (我已经testing过)。 因此,似乎上下文pipe理器不closures连接。 我必须手动closures连接吗? 如果我把它打开呢? 编辑 我的结论是… 上下文pipe理器中的连接没有closures ,我已经testing并确认了它。 在__exit__ ,上下文pipe理器只通过conn.commit()提交更改 with conn和with sqlite3.connect(db_filename) as conn是同一件事情 。 所以使用任何一个仍然保持连接活着 with语句不会创build一个新的作用域,因此在该成员之内创build的所有variables都可以在其外部访问 最后,你应该手动closures连接

SQLite3整数最大值

sqlite3中数据typesINTEGER的最大值是多less? 你如何将IP地址存储在数据库中? 附件是什么? 如何使用sql ddl创build属于特定数据库的表? 这个错误是什么? 系统目录列表出现错误:no such table:temp.sqlite_master无法执行语句 sqlite3文本数据typessupoports unicode? 谢谢。

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

原来的问题 背景 众所周知,SQLite 需要进行微调,以达到50k插入/秒的插入速度。 这里有很多关于插入速度慢的问题和大量的build议和基准。 也有声称SQLite可以处理大量的数据 ,报告的50+ GB不会导致正确的设置任何问题。 我遵循这里和其他地方的build议,以达到这些速度,我很高兴35k-45k插入/秒。 我所遇到的问题是,所有的基准testing都只能certificate快速插入速度<1mlogging。 我所看到的是插入速度似乎与桌子大小成反比 。 问题 我的用例需要在[x_id, y_id, z_id]存储500m到1b元组( [x_id, y_id, z_id] )几年(1m行/天)。 值是1到2,000,000之间的所有整数ID。 z_id上有一个索引。 前10M行的性能是非常好的,大约35K插入/秒,但是当表具有~20m行时,性能开始受损。 我现在看到大约100个插入/秒。 桌子的大小不是特别大。 行20米,磁盘大小约500MB。 该项目是用Perl编写的。 题 这是在SQLite中的大表的现实,还是有任何秘密保持高行插入率> 10米行? 已知的解决方法,如果可能,我想避免 删除索引,添加logging,重新索引 :这是一个很好的解决方法,但在更新过程中数据库仍然需要使用时不起作用。 这将无法使数据库完全无法访问x分钟/天 把表分成更小的子表/文件 :这将在短期内工作,我已经尝试过了。 问题是,我需要能够从整个历史logging中检索数据,这意味着最终我将达到62个表附件的限制。 附加,在临时表中收集结果,每个请求分离数百次似乎是很多工作和开销,但是如果没有其他select,我会尝试。 设置 SQLITE_FCNTL_CHUNK_SIZE :我不知道C( SQLITE_FCNTL_CHUNK_SIZE ),所以我宁愿不学习它,只是为了完成这个。 我看不出用Perl设置这个参数的方法。 UPDATE 虽然SQLite声称它能够处理大型数据集,但是Tim还是build议索引导致插入时间越来越慢,我使用以下设置进行了基准比较: 插行: 1400万 提交批量大小: 50,000条logging cache_size编译指示: 10,000 page_size pragma: 4,096 […]

如何从sqlite(3.6.21)表中删除约束?

我有下面的表格: CREATE TABLE child( id INTEGER PRIMARY KEY, parent_id INTEGER CONSTRAINT parent_id REFERENCES parent(id), description TEXT); 我如何删除约束?