我完全陌生Python sqlite3模块 https://docs.python.org/3.6/library/sqlite3.html(以及一般的 SQL),这完全难倒了我。大量缺乏描述cursor objects https://docs.python.org/3.6/library/sqlite3.html#cursor-objects(更确切地说,他们的必要性)也似乎很奇怪。
这段代码是首选的处理方式:
import sqlite3
conn = sqlite3.connect("db.sqlite")
c = conn.cursor()
c.execute('''insert into table "users" values ("Jack Bauer", "555-555-5555")''')
conn.commit()
c.close()
这个不是,尽管它工作得同样好并且没有(看似毫无意义)cursor
:
import sqlite3
conn = sqlite3.connect("db.sqlite")
conn.execute('''insert into table "users" values ("Jack Bauer", "555-555-5555")''')
conn.commit()
谁能告诉我为什么我需要一个cursor
?
这似乎是毫无意义的开销。对于我的脚本中访问数据库的每个方法,我应该创建和销毁一个cursor
?
为什么不直接使用connection
object?
在我看来,这只是一个误用的抽象概念。数据库游标是一个抽象,用于数据集遍历。
From 维基百科关于该主题的文章 http://en.wikipedia.org/wiki/Cursor_%28databases%29:
在计算机科学与技术中,数据库游标是一种控件
允许遍历数据库中的记录的结构。
游标方便后续处理与
遍历,例如数据库的检索、添加和删除
记录。数据库游标的遍历特性使得游标
类似于编程语言中迭代器的概念。
And:
游标不仅可以用于从 DBMS 中获取数据到数据库中
应用程序还可以识别表中要更新的行或
已删除。 SQL:2003 标准定义了定位更新和
为此目的定位了删除 SQL 语句。这样的陈述确实
不使用带有谓词的常规 WHERE 子句。相反,一个光标
标识行。光标必须打开并已定位
通过 FETCH 语句在一行上。
如果您检查Python sqlite 模块的文档 http://docs.python.org/2/library/sqlite3.html,你可以看到一个python模块cursor
即使对于CREATE TABLE
声明,因此它用于仅connection
对象应该足够了 - 正如OP正确指出的那样。这种抽象与人们对数据库游标的理解不同,因此,用户会感到困惑/沮丧。不管效率如何,这只是概念上的开销。如果在文档中指出 python 模块,那就太好了cursor
与 SQL 和数据库中的游标有些不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)