SQLite是一個小型的關系型數據庫,最大的特點是不需要單獨的服務、零配置。Python的標准庫中自帶了SQLite數據庫相應的驅動模塊了。安裝了Python,就可以直接使用SQLite數據庫。
建立數據庫連接對象
>>> import sqlite3 # 導入sqlite3模塊 >>> conn = sqlite3.connect('mydb') # 創建數據庫連接對象
通過上面的方式就創建了數據庫的連接對象了,在sqlite3.connect('mydb')中,如果數據庫mydb已經存在,就連接上它;如果不存在,則會自動創建一個並連接。注意,這里的路徑是隨意指定的。
建立游標對象
和MySQL類似,建立了數據庫連接后,還要建立游標對象,通過游標對象操作數據庫。
>>> cur = conn.cursor() # 創建游標對象
通過游標對象操作數據庫
操作方法和MySQL類似。
# 創建數據表 >>> create_table = "create table stu(id int auto_increment primary key, name char(8) not null, class char(8) default null)" # 創建數據庫 >>> cur.execute(create_table) <sqlite3.Cursor object at 0x10fae3b90> >>> conn.commit() # 執行提交 # 執行數據插入 >>> sql = "insert into stu(id, name, class) values(1, '張三', 'python3')" >>> cur.execute(sql) <sqlite3.Cursor object at 0x10fae3b90> >>> conn.commit() # 執行數據查詢 >>> sql = "select * from stu" >>> cur.execute(sql) <sqlite3.Cursor object at 0x10fae3b90> >>> cur.fetchall() # 取出所有數據 [(1, '張三', 'python3')] # 以列表的形式返回 >>> cur.fetchall() [] >>> sql = "select * from stu where class='python3'" >>> cur.execute(sql) <sqlite3.Cursor object at 0x10fae3b90> >>> cur.fetchone() # 一條一條的取出數據 (1, '張三', 'python3') >>> cur.fetchone() (2, '李四', 'python3') # 執行數據更新 >>> sql = "update stu set name='張三2' where id=1" # 數據更新 >>> cur.execute(sql) <sqlite3.Cursor object at 0x10fae3b90> >>> sql = "select * from stu" >>> cur.execute(sql) <sqlite3.Cursor object at 0x10fae3b90> >>> cur.fetchall() [(1, '張三2', 'python3'), (2, '李四', 'python3'), (3, '王舞', 'python4')] # 執行數據刪除 >>> sql = "delete from stu where id=3" # 刪除數據 >>> cur.execute(sql) <sqlite3.Cursor object at 0x10fae3b90> # 執行提交 >>> conn.commit() # 事務提交,每執行一次數據庫更改的操作,就執行提交 # 執行數據庫關閉 >>> cur.close() >>> conn.close()
SQLite中的占位符
SQLite中的占位符和Python中有區別,是以?作為占位符。
>>> data = [(3, '王舞', 'python4'), (4, '曲奇', 'python5'), (5, '語言', 'python5')] #批量數據放入列表 >>> sql = "insert into stu(id, name, class) values(?, ?, ?)" # ?作為占位符 >>> cur.executemany(sql, data) # 執行批量插入 <sqlite3.Cursor object at 0x10fae3f10> >>> conn.commit()
