Python之Sqlite3資料庫基本操作

来源:https://www.cnblogs.com/hsiang/archive/2020/07/27/13382879.html
-Advertisement-
Play Games

在一些小的應用中,難免會用到資料庫,Sqlite資料庫以其小巧輕便,無需安裝,移植性好著稱,本文主要以一個簡單的小例子,簡述Python在Sqlite資料庫方面的應用,僅供學習分享使用,如有不足之處,還請指正。 ...


在一些小的應用中,難免會用到資料庫,Sqlite資料庫以其小巧輕便,無需安裝,移植性好著稱,本文主要以一個簡單的小例子,簡述Python在Sqlite資料庫方面的應用,僅供學習分享使用,如有不足之處,還請指正。

涉及知識點

  1. sqlite3是Python集成的內置類庫,提供Python操作sqlite3的相關介面。
  2. sqlite3.connect(dbfile) 創建資料庫連接,返回一個連接對象
  3. conn.cursor() 創建游標對象,通過返回的cursor對象,執行相應的SQL語句。
  4. cur.execute(sql, *args) 執行語句
  5. conn.commit() 提交執行的結果到資料庫
  6. conn.rollback() 回退執行的結果
  7. cur.close() 關閉cursor對象
  8. 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數組很像
  • 這些參數在書寫時要遵循一定的順序即:位置參數、預設參數、變長參數、關鍵字參數、命名關鍵字參數

備註

 業精於勤,荒於嬉;行成於思,毀於隨!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉 示例 1: 輸入: 123 輸出: 321 示例 2: 輸入: -123 輸出: -321 示例 3: 輸入: 120 輸出: 21 /** * @param {number} x * @return {number} */ v ...
  • 利用隊列我們可以解決很多問題,js數組也可以實現隊列,隊列的思想為先近先出,js可以用 push和 shift() 很容易的實現一個隊列 給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。 示例: 二叉樹:[3,9,20,null,null,15,7], 3 ...
  • JS獲取URL信息類 主要功能有: 1.獲取URL基本信息,包括:網址,協議,埠號等。 2.地址欄獲取參數。 3.將json格式的參數對象轉換成字元串。 //獲取URL信息 var shaoURL = shaoURL || {}; (function (n){ var d = { pathname ...
  • 前言 單例模式應該是我們最熟悉的模式了,如果說要隨便抓一個程式員,讓他說一說最熟悉的集中設計模式,我想肯定有單例模式。 我們這節就全面的來講解一下單例模式。 為什麼要用單例模式 單例模式理解起來非常簡單。在一個系統中,一個類只允許創建一個對象,那這個類就是單例類,這種設計模式就叫做單例設計模式。 為 ...
  • Strategy Pattern enables selecting an algorithm at runtime. In more detail, code receives run-time instructions as to which in a family of algorithms ...
  • 代理模式的目地是為對象提供一種代理以控制對這個對象的訪問。為什麼會出現“通過一個代理對象,控制其他對象訪問目標對象”這種場景,而不知直接new()出一個對象直接使用呢?這是因為在有些場景下對象的訪問比較複雜,且需要一些額外的控制,這時如果直接new()出實例,併在調用端處理這些繁雜的細節,會增加系統 ...
  • 簡介 在企業級開發中、我們經常會有編寫資料庫表結構文檔的時間付出,從業以來,待過幾家企業,關於資料庫表結構文檔狀態:要麼沒有、要麼有、但都是手寫、後期運維開發,需要手動進行維護到文檔中,很是繁瑣、如果忘記一次維護、就會給以後工作造成很多困擾、無形中製造了很多坑留給自己和後人,於是需要一個插件工具 s ...
  • K-Bag定義為K的多個任意全排列的組合(eg:1 2 3 2 3 1 1 2 3),給定一個長為n的數組,判斷是否為K-Bag的一部分。 題解: (1≤n≤5⋅105,1≤k≤109),k<=n時,用g[i]判斷前i個數是否不相等,h[i]判斷i~n是否不相等,f[i]判斷i~i+k是否不相等,b ...
一周排行
    -Advertisement-
    Play Games
  • 最近做項目過程中,使用到了海康相機,官方只提供了C/C++的SDK,沒有搜尋到一個合適的封裝了的C#庫,故自己動手,簡單的封裝了一下,方便大家也方便自己使用和二次開發 ...
  • 前言 MediatR 是 .NET 下的一個實現消息傳遞的庫,輕量級、簡潔高效,用於實現進程內的消息傳遞機制。它基於中介者設計模式,支持請求/響應、命令、查詢、通知和事件等多種消息傳遞模式。通過泛型支持,MediatR 可以智能地調度不同類型的消息,非常適合用於領域事件處理。 在本文中,將通過一個簡 ...
  • 前言 今天給大家推薦一個超實用的開源項目《.NET 7 + Vue 許可權管理系統 小白快速上手》,DncZeus的願景就是做一個.NET 領域小白也能上手的簡易、通用的後臺許可權管理模板系統基礎框架。 不管你是技術小白還是技術大佬或者是不懂前端Vue 的新手,這個項目可以快速上手讓我們從0到1,搭建自 ...
  • 第1章:WPF概述 本章目標 瞭解Windows圖形演化 瞭解WPF高級API 瞭解解析度無關性概念 瞭解WPF體繫結構 瞭解WPF 4.5 WPF概述 ​ 歡迎使用 Windows Presentation Foundation (WPF) 桌面指南,這是一個與解析度無關的 UI 框架,使用基於矢 ...
  • 在日常開發中,並不是所有的功能都是用戶可見的,還在一些背後默默支持的程式,這些程式通常以服務的形式出現,統稱為輔助角色服務。今天以一個簡單的小例子,簡述基於.NET開發輔助角色服務的相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 第3章:佈局 本章目標 理解佈局的原則 理解佈局的過程 理解佈局的容器 掌握各類佈局容器的運用 理解 WPF 中的佈局 WPF 佈局原則 ​ WPF 視窗只能包含單個元素。為在WPF 視窗中放置多個元素並創建更貼近實用的用戶男面,需要在視窗上放置一個容器,然後在這個容器中添加其他元素。造成這一限制的 ...
  • 前言 在平時項目開發中,定時任務調度是一項重要的功能,廣泛應用於後臺作業、計劃任務和自動化腳本等模塊。 FreeScheduler 是一款輕量級且功能強大的定時任務調度庫,它支持臨時的延時任務和重覆迴圈任務(可持久化),能夠按秒、每天/每周/每月固定時間或自定義間隔執行(CRON 表達式)。 此外 ...
  • 目錄Blazor 組件基礎路由導航參數組件參數路由參數生命周期事件狀態更改組件事件 Blazor 組件 基礎 新建一個項目命名為 MyComponents ,項目模板的交互類型選 Auto ,其它保持預設選項: 客戶端組件 (Auto/WebAssembly): 最終解決方案裡面會有兩個項目:伺服器 ...
  • 先看一下效果吧: isChecked = false 的時候的效果 isChecked = true 的時候的效果 然後我們來實現一下這個效果吧 第一步:創建一個空的wpf項目; 第二步:在項目裡面添加一個checkbox <Grid> <CheckBox HorizontalAlignment=" ...
  • 在編寫上位機軟體時,需要經常處理命令拼接與其他設備進行通信,通常對不同的命令封裝成不同的方法,擴展稍許麻煩。 本次擬以特性方式實現,以兼顧維護性與擴展性。 思想: 一種命令對應一個類,其類中的各個屬性對應各個命令段,通過特性的方式,實現其在這包數據命令中的位置、大端或小端及其轉換為對應的目標類型; ...