我對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