我对Python's sqlite3 module(以及有关SQL的总体情况)完全陌生,而且这完全让我失望。对于cursor
objects(而不是他们的必要性)的描述的缺乏也很奇怪。为什么在查询sqlite数据库时需要创建一个游标?
的这段代码是做事的首选方式:
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
对象?
另外值得记住:[PEP 249](http://www.python.org/dev/peps/pep-0249/)没有定义'连接对象上execute',这是一个'sqlite3'延期。 – 2011-06-11 19:50:30
它仍然适用于SELECT语句:http://pastebin.com/5ZbhfEn7。原因是您没有在连接对象上调用任何.fetchXXXX方法,所以您正在对由连接的.execute()方法返回的对象调用.fetchXXXX方法。 – 2011-06-12 03:10:18
@杰克:是的,但是你仍然以某种方式结束了游标。 – Amber 2011-06-12 07:15:23