SQLAlchemy 使用(一)創建單一model


前言

 最近項目等待前端接接口,比較空閑.就想學習一些新東西.學啥呢?考慮到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

alembic的教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM