---
# System prepended metadata

title: 在Render部屬PostgreSQL資料庫伺服器
tags: [Python, PostgreSQL, Render]

---

使用Render的PostgreSQL部屬雲端資料庫伺服器, 可以方便在各平台存取資料 
Render的PostgreSQL免費方案只能設一個資料伺服器，資料只能保存 3 個月


## 在Render創建PostgreSQL
登入Render後, 在左上角點選+New --> PostgreSQL
![image](https://hackmd.io/_uploads/ryIBix83C.png =20%x)

接下來設定PostgreSQL, 填完按下"Create Database", 這樣就完成創建了
![image](https://hackmd.io/_uploads/B107cg82A.png)
![image](https://hackmd.io/_uploads/BJ43j5rh0.png)
創建完成後, 進入PostgreSQL的info頁面, 可以使用這些資訊用來連接PostgreSQL資料庫
可以使用psql命令行工具、pgAdmin(GUI)或是 Python(psycopg2)來連接
![image](https://hackmd.io/_uploads/r1d1goS20.png)
<br/>

## 使用pgAdmin連接PostgreSQL
pgAdmin是PostgreSQL的GUI圖形化介面工具
這裡下載pgAdmin https://www.pgadmin.org/download/
打開pgAdmin, 點選Object -> Server, 連接到PostgreSQL的設定
![image](https://hackmd.io/_uploads/Bkkr1oHhC.png =80%x)
第一個分頁"General", 填寫伺服器名稱
![image](https://hackmd.io/_uploads/BJ9OY6B30.png)
第二個分頁"Connection"
pgAdmin依PostgreSQL info對應的欄位填寫即可
**特別注意!!!**
Internal Database URL結構：postgres://[username]:[password]@**[hostname].[伺服器位置].render.com**/[database]
pgAdmin的Host name/address只要貼"**[hostname].[伺服器位置].render.com**", 也就是複製@後面到render.com
填好了按下"Save"季就完成了
![image](https://hackmd.io/_uploads/HyZAFTr20.png)
看到小象就是成功囉
![image](https://hackmd.io/_uploads/B1df_xI2C.png)


可以先創建一個表單來試試
*注意PostgreSQL和MySQL語法有一些差異, 像是MySOL在建立id自動增加用AUTO_INCREASEMENT, PostgreSQL則是用SERIAL

* 建立表單步驟：
    1. 打開指令頁面：點選Database再點選上面圖示(Query tool), 也可以在Database點選右鍵再點選Query tool
    2. 輸入創建表單的指令後, 再點選小箭頭(1)執行單一命令, 如果全部執行按左邊的箭頭

![image](https://hackmd.io/_uploads/HJY8VhH3R.png)
![image](https://hackmd.io/_uploads/By9dGnr3R.png)
然後在Database點右鍵, 點選Refresh, 刷新頁面
![image](https://hackmd.io/_uploads/H14UZ2S20.png =50%x)
展開 Database -> 點擊要檢視的 database -> Schemas -> public -> Tables, 就可以看到建立的表單了
![image](https://hackmd.io/_uploads/HJ9n83S30.png =50%x)
<br/>

## 使用Python連接PostgreSQL
首先, 在終端機安裝psycopg2
```
$ pip install psycopg2
```
前面使用pgAdmin已經新增了資料表, 在這裡使用python新增資料進去
1. 連接到PostgreSQL
2. 新增一筆資料, 並顯示最後一筆資料

```py=
import psycopg2

# 連接到 PostgreSQL 資料庫 
conn = psycopg2.connect(
    host="<Your hostname/address>",  # hostname/address
    database="<Your database>",      # 資料庫名稱
    user="<Your user name>",         # 資料庫使用者名稱
    password="<password>"            # 資料庫密碼
)

# 建立游標物件
cur = conn.cursor()

# 將資料插入到資料表
cur.execute("INSERT INTO mydata (name, phone) VALUES ('Albert', '0921333444');")
cur.execute("SELECT * FROM mydata ORDER BY id DESC LIMIT 1;")

# 獲取所有結果
result = cur.fetchall()

# 顯示結果
for row in result:
    print(row)

# 提交變更
conn.commit()

# 關閉游標和連接
cur.close()
conn.close()

print("資料已成功新增。")
```
執行結果:
![image](https://hackmd.io/_uploads/ry6oV-UnC.png)

<br/>

## 參考資料
https://jimmyswebnote.com/postgresql-tutorial/
https://medium.com/@King610160/render%E9%83%A8%E7%BD%B2-postgresql%E8%A8%AD%E7%BD%AE-e39ad7c3c862



