第十屆鐵人賽 flask-restful DAY22-搞懂如何導入sqlite

導入sqlite

在昨日的內容之中我們將既有的user做一個重構,並且將跟使用者相關的函式抽離到UserModel之中,但是目前的內容只要伺服器重新開機之後原來新增的資料就會消失,所以今天教授大家如何透過sqlite將資料存在檔案中,透過這動作我們可以把資料保留下來。

安裝sqlite

安裝這動作已經做過很多次了,相信讀者也可以完成此動作,若是有遇到問題的就看一下下列得指令了:

pip install sqlite3

透過上述指令可以安裝sqlite3這個函式庫,接下來告訴大家一些sqlite的方法。

sqlite的方法

這部分透過實作教授大家一些sqlite的方法,所以分成以下幾種方式來教授大家如何使用sqlite:

建立連線

在所有動作之前首先是要先連結資料庫,在sqlite簡單講就是連結哪個檔案,所以指令很簡單,這部分先看一下下列內容:

import sqlite3

conn = sqlite3.connect('user.db')

透過sqlite3.connect(檔案名稱),如此就可以用資料庫的方式存取user.db這個檔案。接下來除了sqlite的api還會帶一些SQL語法。

CREATE TABLE

其實sqlite的指令還算簡單,因為只要讀者會SQL語法就方便許多,然而這30天主要是教授大家如何使用flask-restful所以不去帶太多SQL語法,所以這邊就簡單帶個幾種語法,首先是建立Table的語法。

cursor = conn.cursor()
cursor.execute('DROP TABLE IF EXISTS users')
cursor.execute('CREATE TABLE IF NOT EXISTS users('
               'id INTEGER PRIMARY KEY, '
               'name TEXT, '
               'email TEXT, '
               'password TEXT)')

conn.commit()
conn.close()

如此及建立了一個名為user的table,裡面有幾個欄位分別為id、name、email以及password,如此我們的資料庫建立完成了。

執行指令

相信在看過CREATE TABLE之後很多讀者們就已經開始新增資料或刪除資料了,因為sqlite的語法初步就是以下幾種:

conn = sqlite3.connect('user.db')
cursor = conn.cursor()
cursor.execute(SQL COMMAND)

conn.commit()
conn.close()

簡單說明一下就是以下得循環:

  • 連接資料庫
  • 取得cursor
  • 執行命令
  • commit命令(將資料執行異動到檔案內)
  • 關閉連線

新增多筆資料

在上述說明了如何執行指令,但是如果我們要新增多筆資料要如何執行呢,接下來就請大家看看以下例子:

conn = sqlite3.connect('user.db')
cursor = conn.cursor()
insert_query = 'INSERT INTO users VALUES(?, ?, ?, ?)'

users = []

users.append((None, 'kirai', 'abc.def@gmail.com', '123456'))
users.append((None, 'kirai1', 'abc1.def@gmail.com', '123456'))
users.append((None, 'kirai2', 'abc2.def@gmail.com', '123456'))

cursor.executemany(insert_query, users)

conn.commit()
conn.close()

如此我們將可以新增三筆使用者資料進到資料庫內。

查詢資料

在教授完如何新增資料到資料庫內,接下來就要告訴大家如何重資料庫提取資料出來,範例請看下列內容:

for row in cursor.execute(SELECT * FROM users):
    print(row)
conn.commit()
conn.close()

其中row代表query出來每一列所含資料,這裡就可以提取row裡面的資料轉換為UserModel並返回給客戶端。

小結

今日的內容教授大家了解sqlite的基本語法,其實其他資料庫如mysql,postgresql亦是同樣的道理所以筆者就不一一贅述,待有興趣的讀者自行發掘,接下來就介紹如何整合我們的應用程序與sqlite將現有的資料存放於資料庫內並提取出來使用,敬請期待。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *