日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表

發(fā)布時間:2024/9/27 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

標(biāo)簽:

# 轉(zhuǎn)載請留言聯(lián)系

ORM 是什么?

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

優(yōu)點 :

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

對數(shù)據(jù)庫的操作都轉(zhuǎn)化成對類屬性和方法的操作.

不用編寫各種數(shù)據(jù)庫的sql語句.

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

不在關(guān)注用的是mysql、oracle...等.

通過簡單的配置就可以輕松更換數(shù)據(jù)庫, 而不需要修改代碼.

缺點 :

相比較直接使用SQL語句操作數(shù)據(jù)庫,有性能損失.

根據(jù)對象的操作轉(zhuǎn)換成SQL語句,根據(jù)查詢的結(jié)果轉(zhuǎn)化成對象, 在映射過程中有性能損失.

Flask-SQLAlchemy的安裝

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

安裝 flask-sqlalchemy

pip3 install flask-sqlalchemy

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

pip3 install flask-mysqldb

如果第二步安裝出現(xiàn)錯誤,一般是沒有安裝 libmysqld-dev 造成的

sudo apt-get install libmysqld-dev

Flask-SQLAlchemy 連接數(shù)據(jù)庫以及創(chuàng)建表

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app=Flask(__name__)

# 連接數(shù)據(jù)庫

app.config['SQLALCHEMY_DATABASE_URI'] = '數(shù)據(jù)庫類型://數(shù)據(jù)庫用戶名:數(shù)據(jù)庫密碼@數(shù)據(jù)庫地址:數(shù)據(jù)庫端口/數(shù)據(jù)庫名字'

# 設(shè)置是否跟蹤數(shù)據(jù)庫的修改情況,一般不跟蹤

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 數(shù)據(jù)庫操作時是否顯示原始SQL語句,一般都是打開的,因為我們后臺要日志

app.config['SQLALCHEMY_ECHO'] = True

# 實例化orm框架的操作對象,后續(xù)數(shù)據(jù)庫操作,都要基于操作對象來完成

db = SQLAlchemy(app)

# 聲明模型類

class Role(db.Model):

__tablename__ = "my_table" #設(shè)置表名

id = db.Column(db.INTEGER,primary_key=True) 設(shè)置字段,以及屬性

name = db.Column(db.String(10),nullable=False)

@app.route("/")

def index():

return "hello"

if __name__ == '__main__':

db.create_all() # 創(chuàng)建當(dāng)前應(yīng)用中聲明的所有模型類對應(yīng)的數(shù)據(jù)表,db.drop_all()是刪除表

app.run(debug=True)

數(shù)據(jù)庫的其他配置

名字備注

SQLALCHEMY_DATABASE_URI

用于連接的數(shù)據(jù)庫 URI 。例如:sqlite:tmp/test.dbmysql://username:password@server/db

SQLALCHEMY_BINDS

一個映射 binds 到連接 URI 的字典。更多 binds 的信息見用 Binds 操作多個數(shù)據(jù)庫。

SQLALCHEMY_ECHO

如果設(shè)置為Ture, SQLAlchemy 會記錄所有 發(fā)給 stderr 的語句,這對調(diào)試有用。(打印sql語句)

SQLALCHEMY_RECORD_QUERIES

可以用于顯式地禁用或啟用查詢記錄。查詢記錄 在調(diào)試或測試模式自動啟用。更多信息見get_debug_queries()。

SQLALCHEMY_NATIVE_UNICODE

可以用于顯式禁用原生 unicode 支持。當(dāng)使用 不合適的指定無編碼的數(shù)據(jù)庫默認(rèn)值時,這對于 一些數(shù)據(jù)庫適配器是必須的(比如 Ubuntu 上 某些版本的 PostgreSQL )。

SQLALCHEMY_POOL_SIZE

數(shù)據(jù)庫連接池的大小。默認(rèn)是引擎默認(rèn)值(通常 是 5 )

SQLALCHEMY_POOL_TIMEOUT

設(shè)定連接池的連接超時時間。默認(rèn)是 10 。

SQLALCHEMY_POOL_RECYCLE

多少秒后自動回收連接。這對 MySQL 是必要的, 它默認(rèn)移除閑置多于 8 小時的連接。注意如果 使用了 MySQL , Flask-SQLALchemy 自動設(shè)定 這個值為 2 小時。

連接其他數(shù)據(jù)庫

完整連接 URI 列表請?zhí)D(zhuǎn)到 SQLAlchemy 下面的文檔 (Supported Databases) 。

常用的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)值

標(biāo)簽:

來源: https://www.cnblogs.com/chichung/p/9782919.html

總結(jié)

以上是生活随笔為你收集整理的flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。