Python | FastAPIでAPI作成 ~その8:データベース(SQLite3)と連携
- 2022.07.19
- FAST API
今回は前回の続きとして、データベースとの連携を行います。
前回の記事は以下から↓
今回は「sqlite3」を用います。
sqlite3
データベースの環境を準備します。(※事前にsqlite3はインストールしているものとします。)
インストール方法は以下の記事に纏めています。
今回は、.pyファイルのカレントディレクトリ上に「User.db」を作成します。
①コマンドプロンプトを開く
Win + R -> cmd
②カレントディレクトリに移動
cd でpyファイルが置かれているフォルダに移動
③dbの作成
以下のコマンドでdbを作成します。
sqlite3 User.db
④テーブルの作成
以下のクエリでテーブルを作成します。
create table if not exists User_list("ID" unique, "Name", "Class");
⑤レコードの追加
以下のクエリでデータをinsertします。
insert into User_list values("M001","Takashi","A");
insert into User_list values("M002","Hanako","A");
insert into User_list values("M003","Hiroshi","B");
insert into User_list values("M004","Kyoko","B");
⑥レコードの確認
select * from User_list; でレコードを確認します。
DBが作成できました。
Python Sqlite3 で接続
Pythonライブラリ「Sqlite3」を用いてSqlite3へ接続します。
pipの場合は以下↓
pip install pysqlite3
condaの場合は以下↓
conda install sqlite3
import Sqlite3するもエラー…
ちょっと躓きました。。。
pythonのプログラム上で import sqlite3 しますが、以下の様なエラーが出て実行できませんでした。
エラー: ImportError: DLL load failed while importing _sqlite3:指定されたモジュールが見つかりません。
解決方法ですが、以下の通りです。(こちらのサイトを参考)
① 公式サイトから zipファイルをダウンロード
以下の公式サイトから dllをダウンロードします。
私の端末はWin10 x64なので、以下のzipをダウンロードします。
② zipを展開
中身はこのようになっています。
③ zipの中身を C:\anaconda3\DLLs内に保存する。
私の場合は、anaconda3フォルダはCドライブ直下に置いていますが、人によっては環境が異なるかと思いますので、適宜読み替えてください。
DLLsフォルダの中に、先ほどの「def」及び「dll」をコピーします。
以上で準備完了です。
プログラム
今回のプログラムは以下の通りです。
from fastapi import FastAPI
from pydantic import BaseModel
import sqlite3
class Item(BaseModel):
ID: str
Name: str
Class: str
app = FastAPI() #インスタンスを作成
# Get /Users/ : 全件取得
# Get /Users/{ID} :特定のIDのみ取得
# POST /Users/ :ユーザの登録
# DELETE /Users/{ID} :ユーザの削除
# PUT /Users/ :ユーザの更新
def execute_query(flag,query, taple):
conn = sqlite3.connect(r"./User.db")
cur = conn.cursor()
cur.execute(query, taple)
if flag == 'S' :
cur_tmp = cur.fetchall()
conn.close
return cur_tmp
elif flag == 'E':
conn.commit()
conn.close
return execute_query("S","select * from User_list;",())
#curl http://localhost:8000/Users/
@app.get("/Users/")
async def users():
return execute_query("S","select * from User_list;",())
#curl http://localhost:8000/Users/{ID}
@app.get("/Users/{u_id}")
async def users(u_id:str):
return execute_query("S","select * from User_list where ID =?;",(u_id,))
#curl -X POST -H "accept: application/json" -H "Content-Type: application/json" -d "{\"ID\":\"M005\", \"Name\":\"Aya\", \"Class\":\"E\"}" http://localhost:8000/Users/
@app.post("/Users/")
async def users(user: Item):
return execute_query("E","insert into User_list values(?,?,?);",(user.ID,user.Name,user.Class))
#curl -X DELETE -H "accept: application/json" http://localhost:8000/Users/M003
@app.delete("/Users/{u_id}")
async def users(u_id:str):
return execute_query("E","Delete from User_list Where ID =?;" , (u_id,))
#curl -X PUT -H "accept: application/json" -H "Content-Type: application/json" -d "{\"ID\":\"\", \"Name\":\"\", \"Class\":\"E\"}" http://localhost:8000/Users/M003
@app.put("/Users/{u_id}")
async def users(u_id:str, user: Item):
return execute_query("E","Update User_list SET Class = ? Where ID = ?;" ,(user.Class, u_id))
実行結果
最後に実行結果を確認します。
Get /Users/
curl http://localhost:8000/Users/
Get /Users/{id}
curl http://localhost:8000/Users/M002
POST /Users/{Json}
curl -X POST -H “accept: application/json” -H “Content-Type: application/json” -d “{\”ID\”:\”M115\”, \”Name\”:\”Aya\”, \”Class\”:\”E\”}” http://localhost:8000/Users/
DELETE /Users/{id}
curl -X DELETE -H “accept: application/json” http://localhost:8000/Users/M003
PUT /Users/{Json}
curl -X PUT -H “accept: application/json” -H “Content-Type: application/json” -d “{\”ID\”:\”\”, \”Name\”:\”\”, \”Class\”:\”F\”}” http://localhost:8000/Users/M002
最後にsqlite3でselect ALL
以上です!
-
前の記事
Python | FastAPIでAPI作成 ~その7:PUTでデータ更新 2022.07.18
-
次の記事
Python | FastAPIでAPI作成 ~その9:herokuを利用する(app作成からPostgreSQL利用まで)~ 2022.07.28