---
# System prepended metadata

title: 1. 使用python連線postgresql

---

# 1. 使用python連線postgresql

## 下載教學檔案
```
cd mimic/

git clone https://github.com/holiday01/mimic-iii-ntuh-tutorial.git
```

## 套件安裝
```
pip install psycopg2-binary
pip install pandas
```
## 載入套件
```
import psycopg2
import pandas as pd
```
## 設定連接資料庫參數
```
conn = psycopg2.connect(database="database_name", user="user_name", 
                        password="user_password", host="IP", 
                        port="IP_port")
```
## 參數介紹
* database 資料庫名稱
* user 帳號
* password 密碼
* host 伺服器IP
* port 連接資料庫的埠

## 連接上資料庫，抓取資料

```
## 允許python執行postgresql語法
with conn.cursor() as cur:

    ## 觀察查詢筆數
    print(cur.rowcount)
    
    ## SQL語法
    sql = "select * from mimiciii.icustays"
    
    ## 執行sql語法
    cur.execute(sql)
    
    ## 取得欄位名稱
    name = [desc[0] for desc in cur.description]
    
    ## fetchall是將所有收尋的資料都寫入 rows 中
    # rows = pd.DataFrame(cur.fetchall())
    rows = pd.DataFrame(cur.fetchall(),columns=name)
    
    ## 取出一筆資料
    # rows = pd.DataFrame(cur.fetchone())
    
    ## 自行設定要幾筆資料
    # rows = pd.DataFrame(cur.fetchmany(10))
    
## 觀察查詢筆數
print(cur.rowcount)

print(rows.shape)
rows.head()
```

## 合併與整理兩個資料表，拿取資料，以敗血病為例
```
conn = psycopg2.connect(database="database_name", user="user_name", 
                        password="user_password", host="IP", 
                        port="IP_port")

with conn.cursor() as cur:

    ## 觀察查詢筆數
    
    ## SQL語法
    sql = """
    select ma.* 
    from mimiciii.admissions ma
    INNER JOIN public.angus pa
    ON ma.hadm_id = pa.hadm_id
    where pa.explicit_sepsis = 1
    """
    
    ## 執行sql語法
    cur.execute(sql)
    
    ## 取得欄位名稱
    name = [desc[0] for desc in cur.description]
    
    ## 取得資料
    rows = pd.DataFrame(cur.fetchall(),columns=name)

print(rows.shape)
rows.head()
    
```