前言
最近項目等待前端接接口,比較空閑.就想學習一些新東西.學啥呢?考慮到ORM的易用性,還是學習一下ORM.那么與Flask搭配的ORM有 flask-sqlalchemy 但是該組件專為Flask定制.
如 JWT與Flask-JWT,考慮到適用性,還是覺得學 SQLAlchemy好一些.
正文
安裝
要想使用 SQLAlchemy,首當其沖的當然是安裝啦
pip install sqlalchemy
建立model文件
然后我們在某個目錄下新建一個 models.py 文件 (文件名叫models完全是因為我想到ORM腦子里第一個就是Django哈)
引入
我們引入相關模塊
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, String, Integer
值得注意的是,最后一個引入引入的是各個字段(比如varchar等,建立model用,所以可能不止這幾個,可以按情況來)
字段對照及約束
字段對照表如下
類型名 | 說明 |
---|---|
Integer | 整形 |
SmallInteger | 小整形 |
BigInteger | 長整形 |
Float | 浮點形 |
String | varchar |
Text | 長文本 text |
Boolean | tinyint |
Date | 日期 datetime.date |
Time | 時間 datetime.time |
DateTime | 日期和時間 datetime.datetime |
約束如下
選項 | 說明 |
---|---|
primary_key | 主鍵 |
unique | 唯一索引 |
index | 常規索引 |
nullable | 是否為空 默認為True |
default | 默認值 |
ForeignKey | 外鍵 |
連接數據庫
我們在操作數據庫前需要先連接數據庫
這里以 pymysql 為例
# 用戶名:密碼@訪問地址:端口/數據庫?編碼方式 engine = create_engine('mysql+mysqldb://root:***@***:***/website?charset=utf8mb4') # 創建DBSession類型 DBSession = sessionmaker(bind=engine) # 創建Base基類 Base = declarative_base()
這時候你可以運行該文件測試是否成功
如果報 ModuleNotFoundError: No module named 'MySQLdb' 錯誤是你缺少模塊,安裝即可(每個操作系統對應的模塊不一樣)
以下的如果pip安裝失敗,使用
yum install mysql-devel gcc gcc-devel python-devel
pip install mysqlclient
easy_install mysql-python (mix os) pip install mysql-python (mix os) apt-get install python-mysqldb (Linux Ubuntu) cd/usr/ports/databases/py-MySQLdb && make install clean (FreeBSD) yum install MySQL-python (linux Fedora, CentOS) pip install mysqlclient (Windows)
創建 model
下面我們寫model
定義的字段和約束參考上面的表
class AdminUser(Base): # 用戶表 __tablename__ = 'admin_user' # 表名 id = Column(Integer, primary_key=True) # 主鍵 username = Column(String(12), nullable=False, index=True) # 用戶名,Varchar12位,不可為空,常規索引 pwd = Column(String(256), nullable=False) # 密碼,不可為空 token = Column(String(256)) # token
想要將表應用到數據庫,在最下面加上
Base.metadata.create_all(engine)
運行py文件即可
但是這種方式只能新建表,不能修改/刪除表字段
這個時候我們需要該模塊作者的另一力作 alembic