flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表
標(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核权限维持,Linux权限维
- 下一篇: golang mysql封装_自己封装的