flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表
標(biāo)簽:
# 轉(zhuǎn)載請(qǐng)留言聯(lián)系
ORM 是什么?
ORM,Object-Relation Mapping。意思就是對(duì)象-關(guān)系映射。ORM 主要實(shí)現(xiàn)模型對(duì)象到關(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的映射。
優(yōu)點(diǎn) :
只需要面向?qū)ο缶幊? 不需要面向數(shù)據(jù)庫(kù)編寫代碼.
對(duì)數(shù)據(jù)庫(kù)的操作都轉(zhuǎn)化成對(duì)類屬性和方法的操作.
不用編寫各種數(shù)據(jù)庫(kù)的sql語句.
實(shí)現(xiàn)了數(shù)據(jù)模型與數(shù)據(jù)庫(kù)的解耦, 屏蔽了不同數(shù)據(jù)庫(kù)操作上的差異.
不在關(guān)注用的是mysql、oracle...等.
通過簡(jiǎn)單的配置就可以輕松更換數(shù)據(jù)庫(kù), 而不需要修改代碼.
缺點(diǎn) :
相比較直接使用SQL語句操作數(shù)據(jù)庫(kù),有性能損失.
根據(jù)對(duì)象的操作轉(zhuǎn)換成SQL語句,根據(jù)查詢的結(jié)果轉(zhuǎn)化成對(duì)象, 在映射過程中有性能損失.
Flask-SQLAlchemy的安裝
SQLAlchemy是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)框架,它提供了高層的 ORM 和底層的原生數(shù)據(jù)庫(kù)的操作。flask-sqlalchemy 是一個(gè)簡(jiǎn)化了 SQLAlchemy 操作的 flask 擴(kuò)展。
安裝 flask-sqlalchemy
pip3 install flask-sqlalchemy
如果連接的是 mysql 數(shù)據(jù)庫(kù),需要安裝 mysqldb?驅(qū)動(dòng)
pip3 install flask-mysqldb
如果第二步安裝出現(xiàn)錯(cuò)誤,一般是沒有安裝 libmysqld-dev 造成的
sudo apt-get install libmysqld-dev
Flask-SQLAlchemy 連接數(shù)據(jù)庫(kù)以及創(chuàng)建表
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app=Flask(__name__)
# 連接數(shù)據(jù)庫(kù)
app.config['SQLALCHEMY_DATABASE_URI'] = '數(shù)據(jù)庫(kù)類型://數(shù)據(jù)庫(kù)用戶名:數(shù)據(jù)庫(kù)密碼@數(shù)據(jù)庫(kù)地址:數(shù)據(jù)庫(kù)端口/數(shù)據(jù)庫(kù)名字'
# 設(shè)置是否跟蹤數(shù)據(jù)庫(kù)的修改情況,一般不跟蹤
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 數(shù)據(jù)庫(kù)操作時(shí)是否顯示原始SQL語句,一般都是打開的,因?yàn)槲覀兒笈_(tái)要日志
app.config['SQLALCHEMY_ECHO'] = True
# 實(shí)例化orm框架的操作對(duì)象,后續(xù)數(shù)據(jù)庫(kù)操作,都要基于操作對(duì)象來完成
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)用中聲明的所有模型類對(duì)應(yīng)的數(shù)據(jù)表,db.drop_all()是刪除表
app.run(debug=True)
數(shù)據(jù)庫(kù)的其他配置
名字備注
SQLALCHEMY_DATABASE_URI
用于連接的數(shù)據(jù)庫(kù) URI 。例如:sqlite:tmp/test.dbmysql://username:password@server/db
SQLALCHEMY_BINDS
一個(gè)映射 binds 到連接 URI 的字典。更多 binds 的信息見用 Binds 操作多個(gè)數(shù)據(jù)庫(kù)。
SQLALCHEMY_ECHO
如果設(shè)置為Ture, SQLAlchemy 會(huì)記錄所有 發(fā)給 stderr 的語句,這對(duì)調(diào)試有用。(打印sql語句)
SQLALCHEMY_RECORD_QUERIES
可以用于顯式地禁用或啟用查詢記錄。查詢記錄 在調(diào)試或測(cè)試模式自動(dòng)啟用。更多信息見get_debug_queries()。
SQLALCHEMY_NATIVE_UNICODE
可以用于顯式禁用原生 unicode 支持。當(dāng)使用 不合適的指定無編碼的數(shù)據(jù)庫(kù)默認(rèn)值時(shí),這對(duì)于 一些數(shù)據(jù)庫(kù)適配器是必須的(比如 Ubuntu 上 某些版本的 PostgreSQL )。
SQLALCHEMY_POOL_SIZE
數(shù)據(jù)庫(kù)連接池的大小。默認(rèn)是引擎默認(rèn)值(通常 是 5 )
SQLALCHEMY_POOL_TIMEOUT
設(shè)定連接池的連接超時(shí)時(shí)間。默認(rèn)是 10 。
SQLALCHEMY_POOL_RECYCLE
多少秒后自動(dòng)回收連接。這對(duì) MySQL 是必要的, 它默認(rèn)移除閑置多于 8 小時(shí)的連接。注意如果 使用了 MySQL , Flask-SQLALchemy 自動(dòng)設(shè)定 這個(gè)值為 2 小時(shí)。
連接其他數(shù)據(jù)庫(kù)
完整連接 URI 列表請(qǐng)?zhí)D(zhuǎn)到 SQLAlchemy 下面的文檔 (Supported Databases) 。
常用的SQLAlchemy字段類型
類型名python中類型說明
Integer
int
普通整數(shù),一般是32位
SmallInteger
int
取值范圍小的整數(shù),一般是16位
BigInteger
int或long
不限制精度的整數(shù)
Float
float
浮點(diǎn)數(shù)
Numeric
decimal.Decimal
普通整數(shù),一般是32位
String
str
變長(zhǎng)字符串
Text
str
變長(zhǎng)字符串,對(duì)較長(zhǎng)或不限長(zhǎng)度的字符串做了優(yōu)化
Unicode
unicode
變長(zhǎng)Unicode字符串
UnicodeText
unicode
變長(zhǎng)Unicode字符串,對(duì)較長(zhǎng)或不限長(zhǎng)度的字符串做了優(yōu)化
Boolean
bool
布爾值
Date
datetime.date
時(shí)間
Time
datetime.datetime
日期和時(shí)間
LargeBinary
str
二進(jìn)制文件
常用的SQLAlchemy列選項(xiàng)
選項(xiàng)名說明
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)-创建表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux内核权限维持,Linux权限维
- 下一篇: golang mysql封装_自己封装的