與資料庫對話(MySQL)篇
上一篇建立是本機的資料庫,這篇來使用 pymysql
模組連線資料庫。
我手頭上收到一組.sql檔案,使用xampp來匯入並模擬線上phpmysql,這代表必須事先了解這資料庫的每個資料表欄位類型,才能確保連線後的動作是否正確。
環境安裝
- Sqlalchemy
- Pymysql
cmd
pip install sqlalchemy pymysql
與資料庫連線(database.py)
基本上與上一篇大同小異,僅差在 URL
及 connect_args
不同。
py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "mysql+pymysql://root@localhost:3306/我的資料庫"
engine = create_engine(
DATABASE_URL, connect_args={}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
解釋一下 pymysql 連線設定 :
mysql + pymysql : // {帳號} : {密碼} @ {路徑} : {port} / {資料庫}
如果沒有密碼就不要輸入資料,就像範例一樣。
建立資料表 ( models.py )
承如上一開始所敘述由於是要連線到已經存在的資料庫內,所必須了解原數據類型,以免產生不必要的錯誤,以下是我收到的資料庫其中一份資料表內容。
先引入 sqlalchemy
所支援的欄位類型,可參考下方連結 :
py
from sqlalchemy import Column, Integer, String, DateTime, Text,Float
引入上一段資料庫連線模組 database.py
內的 Base
py
from database import Base
開始針對資料表欄位舉出類型,可參考下方兩個連結確認支援類型。
py
class products(Base):
__tablename__ = "products"
id = Column(Integer, primary_key=True, index=True)
ppcode = Column(String(20), unique=True, index=True)
..
weight = Column(Float)
..
description = Column(Text)
create_date = Column(DateTime)
..
origincode = Column(String(255))
parent_id = Column(Integer)
..
這串是針對與數個資料表的某個欄位相互對應所用,如果沒有可省略。
py
items = relationship("Item", back_populates="owner")
執行看看結果
如過無法連線,常見有問題有以下幾種 :
- mysql伺服器是否運作。
- 連線資料 (帳號、密碼、資料庫名稱) 是否正確。
- 資料表欄位類型、名稱是否正確。( 下圖是未找到指定的資料表 )
- 引入
資料庫連線模組
的路徑
是否正確。 - 伺服器未開啟連線 :