Windows で FastAPI で SQL Server のデータを利用する１

# 背景
会社にて、FastAPI で、SQL Server の情報を利用する必要が生じたので、試行した記録

まずは以下まで
1. WSL
1. Python
1. FastAPI

# [WSL を使用して Windows に Linux をインストールする](https://learn.microsoft.com/ja-jp/windows/wsl/install)

## install
```powershell: install
wsl --install
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/ca8ba245-8ba1-db71-3569-0981d4b943b8.png)

### 失敗？
途中で何故かダウンロードバーが停止・・ :thinking:<br>10分ほど待つが変化無いので、一旦終了してやり直そうとしたところ、再起動しろとか言われるので、再起動する・・

再度 install コマンドを入れると、Helpが出る。<br>まさに以下<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/8197368c-32f2-517a-5e45-b03ad58fddcf.png)

ということで、ディストリビューション確認
```powershell: ディストリビューション確認
wsl --list --online
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/c6924421-9a45-ca81-651d-d470ce07092e.png)

Ubuntu との違いが判らなかったけれど、まぁ、最新でいいか、と Ubuntu-20.4 を install
・・もしかしたら、常時最新版って意味だったのか？
```powershell: Ubuntu-20.4 install
wsl --install -d Ubuntu-20.04
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/69a29171-07e2-d57f-98ba-fae545828341.png)

# Ubuntu 初期設定
1. User 登録<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/876eda56-ff10-c687-c5c6-8b4d2f20d012.png)
1. password 登録で完了<br>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/7142fcf4-a317-e852-9a4b-19b868e552f0.png)

## 補足
https://daeudaeu.com/python-pip-difference/

https://qiita.com/gaichi/items/b3a7b566cece3a5a06cc

## プロキシの設定
自宅だと無いので不要

:::note warn
プロキシは環境に合わせて修正必要
以下の例でいくと、**10.10.10.10:1010** ってとこ
:::

### 環境確認
```bash: プロキシ確認
printenv http_proxy https_proxy
```

### .bashrc への設定
> \\\wsl$\Ubuntu-20.04\home\shima\.bashrc

を VS-Code などで編集して、以下を追加

```bash: .bashrc
# proxy
export http_proxy="10.10.10.10:1010"
export https_proxy=$http_proxy
```
> \\\wsl$\Ubuntu-20.04\etc\apt\apt.conf

同様に、以下も

```bash: apt.conf
Acquire::http::Proxy "http://10.10.10.10:1010";
Acquire::https::Proxy "http://10.10.10.10:1010";
```

### 参考

https://hangstuck.com/wsl-proxy-setting/

## アップデート
```bash: update to get updating list, then execute updates
sudo apt-get update
sudo apt-get upgrade
```
初っ端はそこそこある。 pip3 

コマンド一覧は以下より

https://manpages.ubuntu.com/manpages/focal/ja/man8/apt-get.8.html

# python 準備
これも、そこそこHeavy
```bash: python
sudo apt install -y python3 python3-pip python-is-python3 python3-venv
```
- python3-pip
    - pip3 のこと。[python3 用の pip](https://vgkits.org/blog/what-is-pip3/)
- python-is-python3
    - python コマンドを通す為。[実際には、python2.* コマンドをって話](https://linuxpip.org/python-is-python3/#python-is-python3_on_Ubuntu)
- python3-venv
    - [python 仮想環境作成用](https://docs.python.org/ja/3/library/venv.html) <code>python3 -m venv [machine name]</code> って感じで

pip3 の update は、[上述のアップデートで](#アップデート)
この段階でやったほうが楽だった・・のかな、とも？

```bash: pip version
pip3 -V
pip -V
```

使わない？と思われるが、pip のアップデートは以下
```bash: pip update
sudo pip3 install --upgrade pip
```


# FastAPI の準備
## インストール Fast API with uvicorn
```bash fastapi install with uvicorn 
pip3 install fastapi[all]
```

## チュートリアルの実践で、Uvicorn 起動確認
https://fastapi.tiangolo.com/ja/tutorial/first-steps/

```bash: fastapi_sample フォルダを用意して、main.py を VS-Code で開く
mkdir fastapi_sample_app
cd fastapi_sample_app
code main.py
```
で、以下のチュートリアルコードを貼り付けたあとで
```python main.py
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}
```

```bash: uvicorn 起動
uvicorn main:app --reload
```

ブラウザで、以下を確認して　Hello Wordl が出ていれば OK
[http://127.0.0.1:8000](http://127.0.0.1:8000)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/3309f1f5-3851-bb00-711d-3778e6db26df.png)

ついでに、Open API ページの確認
[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)

# あとがき
あとは、SQLAlchemy 、ODBC Driver を入れて、CRUD の Sample まで行ければ、かな

チュートリアルがほんと丁寧で感謝しかない

# 次
https://qiita.com/baku2san/items/1e2f31d63f3939533cf2