关于:使用sqlite3-execute vs.executemany;正在提交...

- 使用Cur.executemany(...)与多个
您打电话给执行几次与单个执行人员?这
Python Call开销将加起来数千个电话.
如果您有兴趣,则相关源代码在这里:http://svn.python.org/projects/pytho...qlite/cursor.c.c.c
标准用法在这里:http://docs.python.org/lib/module-sqlite3.html
如果数据库支持交易,则可以自动使用
交易.您的更改只有在您致电.commit()时才会承诺.
否则您的更改将丢失.
在sqllite的特定情况下,某些语句(例如创建表,
Alter Table等)也导致提交.这可能是你的
混乱来自.由于这不是Python DB API规格的一部分
(http://www.python.org/dev/peps/pep-0249/)我不会依靠它.
否则,您将在其他数据库中遇到问题.
另外,在特定情况下,您正在使用"内存" sqllite db.所以
在DB会话等之间丢失数据的问题很少,但是
大多数数据库(在磁盘上,在服务器上跨网络运行)
这变得很重要.
我建议您改用标准光标方法,因此您可以
针对非平板数据库运行代码.性能等
应该与使用直接方法相同.就像页面所说的那样
这是最大的好处.
通常,始终使用.commit()和.close().否则:
- 否.commit() - 自上次提交或
"非DML,非Query语句"(就SQLLITE而言)
- 否.close() - 数据库连接仅在DB时关闭
物体是收集垃圾的.
我认为动态创建模式(表,基于文本文件
结构是一个坏主意.一些原因:
- 这迫使您动态生成所有查询
- 并非所有字符串都是有效的表/列名称
- 这迫使该应用程序作为数据库管理员运行(也许不是
对于Sqllite来说很重要,但是如果您更改为
另一个DBM).
- 潜在的巨大稳定/安全问题 - 文本文件可以
潜在地破坏系统表,用户覆盖等.等等.
您违反了有关数据库设计/使用情况的几个规则.
我强烈建议您使用更好的数据库逻辑.即,创建
提前表和记录(设置脚本,作为DB Admin用户,如果
适用),然后仅使用delete/insert/update/select语句(作为
限制用户,如果适用).
如果这太大了,那么我建议将您的数据库存储在
代替常规的Python结构,并使用泡菜/Yaml/等来写入
磁盘.您当前版本使用"内存"数据库,因此
结果是相同的.您还将获得大量的提升.
这取决于.如果您的应用程序简单,单线螺纹,则单个
连接(全局或通过ARGS)应该很好.仅使用
如果您需要多个光标(多个线程,多个光标
数据库,多个事务/DB隔离级别等).
大卫. (_ @_)

标签: python

添加新评论