在一些小的應用中,難免會用到資料庫,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的相關核心代碼,如下所示:
創建資料表
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
插入陳述句
1 def insertData(name, age): 2 """插入資料""" 3 sql = 'insert into person (name,age)values(?,?)' 4 executeSql(sql, (name, age))View Code
update陳述句
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陳述句
1 def deleteData(id): 2 """通過ID洗掉資料""" 3 sql = 'delete from person where id=?' 4 executeSql(sql, (id,))View Code
上面的陳述句都呼叫統一的executeSql方法,如下所示:
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
查詢陳述句(無條件查詢)
1 def queryData(): 2 """查詢陳述句""" 3 sql = 'select id,name,age from person ' 4 executeQuerySql(sql)View Code
查詢陳述句(條件查詢)
1 def queryDataById(id): 2 """通過id進行查詢""" 3 sql = 'select id,name,age from person where id = ? ' 4 executeQuerySql(sql, (id,))View Code
上面的查詢陳述句,都呼叫統一的executeQuerySql方法,如下所示:
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的引數傳遞一共有以下五種(位置引數、默認引數、變長引數、關鍵字引數、命名關鍵字引數)
位置傳遞,即引數按照定義的位置及順序進行傳遞,如下所示:
1 # 位置傳遞實體: 2 def fun1(a, b, c): 3 return a + b + c 4 5 6 print(fun1(1, 2, 3))View Code
關鍵字傳遞,即通過傳遞的引數的名稱進行識別,
1 # 關鍵字傳遞 2 def fun2(a, b, c): 3 return a + b + c 4 5 6 print(fun2(1, c=3, b=2))View Code
默認值引數傳遞,即給某些引數設定一個默認值,如果不傳則讀取默認值,
1 # 默認值傳遞 2 def fun3(a, b=2, c=3): 3 return a + b + c 4 5 6 print(fun3(a=1))View Code
元組傳遞,在定義函式時,我們有時候并不知道呼叫的時候會傳遞多少個引數,元組引數來進行引數傳遞會非常有用,如下所示:
1 def fun4(*name): 2 print(type(name)) 3 print(name) 4 5 6 fun4((1, 2, 3))View Code
字典傳遞,雖然通過元組可以傳遞多個引數,但如果需要通過鍵值來獲取引數內容時,字典則更加方便,如下所示:
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陣列很像
- 這些引數在書寫時要遵循一定的順序即:位置引數、默認引數、變長引數、關鍵字引數、命名關鍵字引數
備注
業精于勤,荒于嬉;行成于思,毀于隨!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/75657.html
標籤:Python
上一篇:ATM購物車(一)
