在一些小的應用中,難免會用到資料庫,Sqlite資料庫以其小巧輕便,無需安裝,移植性好著稱,本文主要以一個簡單的小例子,簡述Python在Sqlite資料庫方面的應用,僅供學習分享使用,如有不足之處,還請指正。 ...
在一些小的應用中,難免會用到資料庫,Sqlite資料庫以其小巧輕便,無需安裝,移植性好著稱,本文主要以一個簡單的小例子,簡述Python在Sqlite資料庫方面的應用,僅供學習分享使用,如有不足之處,還請指正。
涉及知識點
- sqlite3是Python集成的內置類庫,提供Python操作sqlite3的相關介面。
- sqlite3.connect(dbfile) 創建資料庫連接,返回一個連接對象
- conn.cursor() 創建游標對象,通過返回的cursor對象,執行相應的SQL語句。
- cur.execute(sql, *args) 執行語句
- conn.commit() 提交執行的結果到資料庫
- conn.rollback() 回退執行的結果
- cur.close() 關閉cursor對象
- conn.close() 關閉連接對象
基礎操作代碼
關於Python操作sqlite3的相關核心代碼,如下所示:
創建數據表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def createDb(): 2 """創建db數據表""" 3 sql = ''' 4 create table person ( 5 id integer primary key autoincrement not null, 6 name varchar not null, 7 age integer 8 ) 9 ''' 10 executeSql(sql)View Code
插入語句
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def insertData(name, age): 2 """插入數據""" 3 sql = 'insert into person (name,age)values(?,?)' 4 executeSql(sql, (name, age))View Code
update語句
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def updateData(id, name, age): 2 """通過ID進行修改語句""" 3 sql = 'update person set name=?,age =? where id=?' 4 executeSql(sql, (name, age, id))View Code
delete語句
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def deleteData(id): 2 """通過ID刪除數據""" 3 sql = 'delete from person where id=?' 4 executeSql(sql, (id,))View Code
上面的語句都調用統一的executeSql方法,如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def executeSql(sql, *args): 2 """執行更新語句""" 3 conn = sqlite3.connect(dbfile) 4 cur = conn.cursor() 5 try: 6 cur.execute(sql, *args) 7 conn.commit() 8 print('執行成功,影響行數:', cur.rowcount) 9 except Exception as e: 10 conn.rollback() 11 print(e) 12 print('執行失敗') 13 finally: 14 cur.close() 15 conn.close()View Code
查詢語句(無條件查詢)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def queryData(): 2 """查詢語句""" 3 sql = 'select id,name,age from person ' 4 executeQuerySql(sql)View Code
查詢語句(條件查詢)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def queryDataById(id): 2 """通過id進行查詢""" 3 sql = 'select id,name,age from person where id = ? ' 4 executeQuerySql(sql, (id,))View Code
上面的查詢語句,都調用統一的executeQuerySql方法,如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def executeQuerySql(sql, *args): 2 """執行查詢語句,可帶參數""" 3 conn = sqlite3.connect(dbfile) 4 cur = conn.cursor() 5 try: 6 cur.execute(sql, *args) 7 persons = cur.fetchall() 8 for p in persons: 9 print('當前行信息如下:') 10 print(p) # 返回的是一個元組tuple 11 print('查詢成功') 12 except Exception as e: 13 print(e) 14 print('查詢失敗') 15 finally: 16 cur.close() 17 conn.close()View Code
關於本例子的執行源碼,可通過鏈接進行下載,如下所示:
Python參數傳遞方式
Python的參數傳遞一共有以下五種(位置參數、預設參數、變長參數、關鍵字參數、命名關鍵字參數)
位置傳遞,即參數按照定義的位置及順序進行傳遞,如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # 位置傳遞實例: 2 def fun1(a, b, c): 3 return a + b + c 4 5 6 print(fun1(1, 2, 3))View Code
關鍵字傳遞,即通過傳遞的參數的名稱進行識別。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # 關鍵字傳遞 2 def fun2(a, b, c): 3 return a + b + c 4 5 6 print(fun2(1, c=3, b=2))View Code
預設值參數傳遞,即給某些參數設置一個預設值,如果不傳則讀取預設值。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # 預設值傳遞 2 def fun3(a, b=2, c=3): 3 return a + b + c 4 5 6 print(fun3(a=1))View Code
元組傳遞,在定義函數時,我們有時候並不知道調用的時候會傳遞多少個參數。元組參數來進行參數傳遞會非常有用。如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def fun4(*name): 2 print(type(name)) 3 print(name) 4 5 6 fun4((1, 2, 3))View Code
字典傳遞,雖然通過元組可以傳遞多個參數,但如果需要通過鍵值來獲取參數內容時,字典則更加方便,如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def fun5(a, b, **kwargs): 2 print(type(kwargs)) # <class 'dict'> 3 print(a, b, kwargs) 4 5 6 fun5(2, 3, name='Alan.hsiang', age=23)View Code
參數傳遞註意事項:
- 不可變參數“通過值”進行傳遞
- 像整數和字元串這樣的對象是不可變對象,它們通過對象引用而不是拷貝進行傳遞的,但是因為無論如何都不可能在原處改變不可變對象,實際的效果就很像創建了一份拷貝
- 可變對象是通過“指針”進行傳遞的
- 列表和字典這樣的對象也是通過對象引用進行傳遞的,這一點與C語言使用指針傳遞數組很相似,可變對象能夠在函數內部進行原處的改變,這一點和C數組很像
- 這些參數在書寫時要遵循一定的順序即:位置參數、預設參數、變長參數、關鍵字參數、命名關鍵字參數
備註
業精於勤,荒於嬉;行成於思,毀於隨!!!