Flask——數(shù)據(jù)庫操作1

ORM

Object-Relation-Mapping,意為對象-關(guān)系映射。主要實現(xiàn)模型對象到關(guān)系數(shù)據(jù)庫的映射

ORM的優(yōu)點:

  • 只需要面向?qū)ο缶幊?,不需要面向?shù)據(jù)庫編寫代碼。

1.對數(shù)據(jù)庫的操作都轉(zhuǎn)化成對類屬性和方法的操作
2.不用編寫各種數(shù)據(jù)測sql語句

  • 實現(xiàn)了數(shù)據(jù)模型與數(shù)據(jù)庫的解耦,屏蔽了不同數(shù)據(jù)庫操作上的差異。

1.不在需要關(guān)注當(dāng)前項目使用的是哪種數(shù)據(jù)庫
2.通過簡單的配置就可以輕松的

ORM的缺點:

  • 相比較直接使用SQL語句操作數(shù)據(jù)庫,有性能損失。
  • 根據(jù)對象的操作轉(zhuǎn)換成SQL語句,根據(jù)查詢的結(jié)果轉(zhuǎn)化成對象,在映射過程中有性能損失。

Flask-SQLAlchemy

flask默認(rèn)提供模型操作,但是并沒有提供ORM,所以一般開發(fā)的時候我們會采用flask-SQLAlchemy模塊來實現(xiàn)ORM操作。

SQLAlchemy是一個關(guān)系型數(shù)據(jù)庫框架,它提供了高層的 ORM 和底層的原生數(shù)據(jù)庫的操作。flask-sqlalchemy 是一個簡化了 SQLAlchemy 操作的flask擴(kuò)展。SQLAlchemy: https://www.sqlalchemy.org/

安裝flask-sqlalchemy

pip install flask-sqlalchemy

如果連接的是 mysql 數(shù)據(jù)庫,需要安裝 mysqldb 驅(qū)動

pip install flask-mysqldb

安裝flask-mysqldb時,注意

安裝 flask-mysqldb的時候,python底層依賴于一個底層的模塊 mysql-client模塊
如果沒有這個模塊,則會報錯如下:

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-21hysnd4/mysqlclient/

解決方案:

apt-get install libmysqlclient-dev python3-dev

運(yùn)行上面的安裝命令如果報錯:
   dpkg 被中斷,您必須手工運(yùn)行 ‘sudo dpkg --configure -a’ 解決此問題。
則根據(jù)提示執(zhí)行命令以下命令,再次安裝mysqlclient
    sudo dpkg --configure -a
    apt-get install libmysqlclient-dev python3-dev

解決了mysqlclient問題以后,重新安裝 flask-mysqldb即可。
pip install flask-mysqldb

數(shù)據(jù)庫連接設(shè)置

在 Flask-SQLAlchemy 中,數(shù)據(jù)庫使用URL指定,而且程序使用的數(shù)據(jù)庫必須保存到Flask配置對象的 SQLALCHEMY_DATABASE_URI 鍵中
config.py,配置文件代碼:

class Config(object):
    DEBUG = True
    SECRET_KEY = "*(%#4sxcz(^(#$#8423"
    # 數(shù)據(jù)庫鏈接配置:
    #數(shù)據(jù)類型://登錄賬號:登錄密碼@數(shù)據(jù)庫主機(jī)IP:數(shù)據(jù)庫訪問端口/數(shù)據(jù)庫名稱
    SQLALCHEMY_DATABASE_URI = "mysql://root:123@127.0.0.1:3306/flask_students"

其他設(shè)置:

# 動態(tài)追蹤修改設(shè)置,如未設(shè)置只會提示警告
SQLALCHEMY_TRACK_MODIFICATIONS = True
#查詢時會顯示原始SQL語句
SQLALCHEMY_ECHO = True

配置完成需要去 MySQL 中創(chuàng)建項目所使用的數(shù)據(jù)庫

$ mysql -uroot -p123
mysql > create database flask_students charset=utf8mb4;

常用的SQLAlchemy字段類型

類型名 python中類型 說明
Integer int 普通整數(shù),一般是32位
SmallInteger int 取值范圍小的整數(shù),一般是16位
BigInteger int或long 不限制精度的整數(shù)
Float float 浮點數(shù)
Numeric decimal.Decimal 普通數(shù)值,一般是32位
String str 變長字符串
Text str 變長字符串,對較長或不限長度的字符串做了優(yōu)化
Unicode unicode 變長Unicode字符串
UnicodeText unicode 變長Unicode字符串,對較長或不限長度的字符串做了優(yōu)化
Boolean bool 布爾值
Date datetime.date 日期
Time datetime.datetime 日期和時間
LargeBinary str 二進(jìn)制文件

常用的SQLAlchemy列選項

選項名 說明
primary_key 如果為True,代表表的主鍵
unique 如果為True,代表這列不允許出現(xiàn)重復(fù)的值
index 如果為True,為這列創(chuàng)建索引,提高查詢效率
nullable 如果為True,允許有空值,如果為False,不允許有空值
default 為這列定義默認(rèn)值

常用的SQLAlchemy關(guān)系選項

選項名 說明
backref 在關(guān)系的另一模型中添加反向引用,用于設(shè)置外鍵名稱,在1查多的
primary join 明確指定兩個模型之間使用的連表條件
uselist 如果為False,不使用列表,而使用標(biāo)量值
order_by 指定關(guān)系中記錄的排序方式
secondary 指定多對多關(guān)系中關(guān)系表的名字
secondary join 在SQLAlchemy中無法自行決定時,指定多對多關(guān)系中的二級連表條件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容