2022年9月2日 星期五

在ElephantSQL建立PostgreSQL資料庫

Heroku免費帳號將在2022年12月31日失效,連帶其提供的PostgreSQL資料庫也將無法使用。Heroku服務可用Vercel取代(參考「Flask專案發布到Vercel」),但Vercel不支援資料庫,所以需使用ElephantSQL來建立PostgreSQL資料庫。

建立ElephantSQL帳號

ElephantSQL建立新帳號可由Github帳號登入建立,如果沒有Github帳號請先申請Github帳號。

開啟「https://www.elephantsql.com/」網頁,按右上角「Log in」鈕。

按「Sign in with Github」鈕建立ElephantSQL新帳號。

建立PostgreSQL資料庫

登入ElephantSQL,按「Create New Instance」鈕。

Name欄位輸入計劃名稱,Plan欄位選取「Tiny Turtle (Free)」免費計劃,然後按「Select Region」。免費計劃的限制是資料庫大小不能超過20M。


Data Center欄位選取Google Compute Engine的「asia-east2 (Hong Kong)」,按「Review」鈕。

確認資料正確後按「Create Instance」建立資料庫。

建立完成後可見到剛建立的資料庫,點選資料庫名稱會進入詳細頁面。

User & Default database欄位是資料庫擁有者及資料庫名稱,Password欄位是密碼,URL欄位的網址(此處為satao.db.elephantsql.com)是資料庫網址,這些資料在後面管理資料庫時會使用。

Current database size欄位是目前資料庫使用量,Max database size欄位是資料庫最大容量。

以pgAdmin管理PostgreSQL資料庫

如果尚未在本機安裝PostgreSQL資料庫,可開啟「https://www.postgresql.org/download」下載安裝檔進行安裝。

執行pgAdmin 4,在左方「Servers」按滑鼠右鍵,於快顯功能表點選「Create / Server」。

Name欄位輸入連線名稱,點選上方「Connection」頁籤。

Host name/address欄位輸入ElephantSQL的URL欄位的網址,Maintenance databasenhe及Username欄位輸入ElephantSQL的User & Default database欄位資料,Password欄位輸入ElephantSQL的密碼,最後按「Save」鈕建立資料庫。

pgAdmin中「elephantsql_jeng / Databases / ekzeixdq」就是ElephantSQL的PostgreSQL資料庫。

新增資料表

如果尚未在本機安裝Flask-SQLAlchemy及 psycopg2,以下面命令安裝:

pip install -U flask_sqlalchemy

pip install -U psycopg2

新增<models.py>程式檔,內容為:

1 from flask import Flask

 2 from flask_sqlalchemy import SQLAlchemy

 3 

 4 app = Flask(__name__)

 5 app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://你的PostgreSQL 資料'

 6 db = SQLAlchemy(app)

 7 

 8 class students(db.Model):

 9    __tablename__ = 'students'

10    sid = db.Column(db.Integer, primary_key = True)

11    name = db.Column(db.String(50), nullable = False)

12    tel = db.Column(db.String(50))

13    addr = db.Column(db.String(200))

14    email = db.Column(db.String(100))

15 

16    def __init__(self, name, tel, addr, email):

17        self.name = name

18        self.tel = tel

19        self.addr = addr

20        self.email = email

21 

22 @app.route('/')

23 def index():

24     db.create_all()

25     return "資料庫連線成功!"

26 

27 if __name__ == '__main__':

28    app.run()

記得將第5列程式的字串修改為使用者的PostgreSQL資料,格式為:

postgresql://管理者帳號:管理者密碼@資料庫位址/資料庫名稱

例如我的字串為:

postgresql://ekzeixdq:密碼@satao.db.elephantsql.com/ekzeixdq

程式執行後,開啟瀏覽器瀏覽服務的頁面,可看到連線成功的訊息:

在pdAdmin管理頁面,展開「elephantsql_jeng / Databases / ekzeixdq / Schemas / Public / Tables」果然新增了students資料表。


沒有留言:

張貼留言