摘要:查詢(xún)記錄在調(diào)試或測(cè)試模式自動(dòng)啟用??梢杂糜陲@式禁用原生支持。當(dāng)使用不合適的指定無(wú)編碼的數(shù)據(jù)庫(kù)默認(rèn)值時(shí),這對(duì)于一些數(shù)據(jù)庫(kù)適配器是必須的比如上某些版本的。這對(duì)是必要的,它默認(rèn)移除閑置多于小時(shí)的連接。注意如果使用了,自動(dòng)設(shè)定這個(gè)值為小時(shí)。
flask-sqlalchemy是flask的一個(gè)ORM擴(kuò)展框架,這個(gè)擴(kuò)展在sqlalchemy的進(jìn)行的擴(kuò)展,更方便的結(jié)合Flask.
什么是ORM?
其是Object Relational Mapping的縮寫(xiě),中文:對(duì)象關(guān)系映射,說(shuō)白了就是程序中的實(shí)體類(lèi)通過(guò)ORM可以映射成為數(shù)據(jù)庫(kù)中的表,方便我們通過(guò)程序的方式操作數(shù)據(jù)表,這里就包括數(shù)據(jù)表的生成、刪除、關(guān)系創(chuàng)建及表記錄的增刪改查。
【config.py】
SQLALCHEMY_DATABASE_URI="mysql://root:[email protected]:3306/test" //數(shù)據(jù)庫(kù)連接 SQLALCHEMY_TRACK_MODIFICATIONS=False
上面兩項(xiàng)是必配置的屬性,否則程序?qū)⒉荒苷_\(yùn)行:所有配置鍵見(jiàn)最后
【create_sur.py】
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app) app.config.from_object("config.py") class User(db.Model): __tablename__ = "user" #指定表名,默認(rèn)模型類(lèi)小寫(xiě) id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(32)) def __repr__(self): return "Role:%s" % self.name if __name__ == "__main__": db.create_all() app.run()
這樣子在test數(shù)據(jù)庫(kù)下就生成了一張user表,是不是很簡(jiǎn)單。
在進(jìn)行數(shù)據(jù)的增刪改查之前,我們先來(lái)看一下常用的操作語(yǔ)句:
db.session.add(obj) 添加對(duì)象
db.session.add_all([obj1,obj2,..]) 添加多個(gè)對(duì)象
db.session.delete(obj) 刪除對(duì)象
db.session.commit() 提交會(huì)話(huà)
db.session.rollback() 回滾
db.session.remove() 移除會(huì)話(huà)
增加數(shù)據(jù)>>>from create_sur import db,User >>>user1=User(name="jim") >>>db.session.add(user1) >>>db.session.commit() //添加一條數(shù)據(jù) >>>user2=User(name="sam") >>>user3=User(name="alice") >>>db.session.add_all([user2,user3]) //批量添加數(shù)據(jù) >>>db.session.commit()查詢(xún)數(shù)據(jù)
>>>from create_sur import db,User >>>user_all=User.query.all() //查詢(xún)所有數(shù)據(jù) >>>user=User.query.filter_by(name="jim").all() //查詢(xún)name為jim的數(shù)據(jù) >>>user=User.query.filter(User.name="sam").first() //查詢(xún)name為sam的數(shù)據(jù)
常用過(guò)濾函數(shù):
常用查詢(xún)函數(shù):
刪除數(shù)據(jù)//在查詢(xún)數(shù)據(jù)的基礎(chǔ)上 >>>db.session.delete(obj) //obj為查詢(xún)后的數(shù)據(jù)對(duì)象 >>>db.session.commit()更新數(shù)據(jù)
//在查詢(xún)數(shù)據(jù)的基礎(chǔ)上通過(guò)修改對(duì)象的屬性然后再添加達(dá)到更新的作用 >>>user=User.query.filter(User.name="sam").first() //查詢(xún)數(shù)據(jù) >>>user.name="sam_two" >>>db.session.add(user) >>>db.session.commit()
上面是一些簡(jiǎn)單的小例子,接下來(lái)我們寫(xiě)一個(gè)有外鍵關(guān)系的兩個(gè)表的例子:
【create_sur2.py】
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app) app.config.from_object("config.py") class Role(db.Model): # 定義表名 __tablename__ = "roles" # 定義列對(duì)象 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) #設(shè)置關(guān)系屬性,方便查詢(xún)使用 us = db.relationship("User", backref="role") #重寫(xiě)__repr__方法,方便查看對(duì)象輸出內(nèi)容 def __repr__(self): return "Role:%s"% self.name class User(db.Model): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True, index=True) password = db.Column(db.String(64)) role_id = db.Column(db.Integer, db.ForeignKey("roles.id")) #定義外鍵 def __repr__(self): return "User:%s"%self.name
上述有兩個(gè)重點(diǎn):
使用ForeignKey義外鍵屬性
使用relationship方法定義兩表的關(guān)系
接下來(lái)我們測(cè)試一下這兩個(gè)方法的作用:
添加一些數(shù)據(jù): >>>from create_sur2 import db,User,Role >>>ro1 = Role(name="admin") >>>ro2 = Role(name="user") >>>db.session.add_all([ro1,ro2]) >>>db.session.commit() >>>us1 = User(name="wang", password="123456", role_id=ro1.id) >>>us2 = User(name="zhang", password="201512", role_id=ro2.id) >>>us3 = User(name="chen", password="987654", role_id=ro2.id) >>>us4 = User(name="zhou", password="456789", role_id=ro1.id) >>>db.session.add_all([us1,us2,us3,us4]) >>>db.session.commit() 測(cè)試一下查詢(xún): >>>from create_sur2 import User,Role >>>role=Role.query.get(1) >>>role.User.all() [User:wang,User:zhou] 這里之所以可以找到就是因?yàn)閞elationship通過(guò)外鍵作用實(shí)現(xiàn)的 >>>user=User.query.get(3) >>>user.role [Role:user] 這里之所以可以找到就是因?yàn)閞elationship的backref參數(shù)值實(shí)現(xiàn)的所有配置清單
SQLALCHEMY_DATABASE_URI 用于連接的數(shù)據(jù)庫(kù) URI
SQLALCHEMY_BINDS 一個(gè)映射 binds 到連接 URI 的字典
SQLALCHEMY_ECHO 如果設(shè)置為T(mén)ure, SQLAlchemy 會(huì)記錄所有 發(fā)給 stderr 的語(yǔ)句,這對(duì)調(diào)試有用。(打印sql語(yǔ)句)
SQLALCHEMY_RECORD_QUERIES 可以用于顯式地禁用或啟用查詢(xún)記錄。查詢(xún)記錄 在調(diào)試或測(cè)試模式自動(dòng)啟用。更多信息見(jiàn)get_debug_queries()。
SQLALCHEMY_NATIVE_UNICODE 可以用于顯式禁用原生 unicode 支持。當(dāng)使用 不合適的指定無(wú)編碼的數(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í)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42881.html
摘要:一個(gè)用來(lái)做數(shù)據(jù)遷移的擴(kuò)展,一般都是結(jié)合使用,在上一篇文章中我也介紹了這個(gè)擴(kuò)展,需要的小伙伴可以看一下,后續(xù)我會(huì)將更深層的寫(xiě)出來(lái)。 flask-migrate一個(gè)用來(lái)做數(shù)據(jù)遷移的falsk擴(kuò)展,一般都是結(jié)合flask-sqlalchemy使用,在上一篇文章中我也介紹了這個(gè)擴(kuò)展,需要的小伙伴可以看一下,后續(xù)我會(huì)將flask-sqlalchemy更深層的寫(xiě)出來(lái)。【config.py】 SQL...
摘要:數(shù)據(jù)庫(kù)關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在表中來(lái)模擬應(yīng)用程序中不同的實(shí)體。這些行之間的連接稱(chēng)作關(guān)系,也是關(guān)系數(shù)據(jù)庫(kù)模型的基礎(chǔ)。就像這個(gè)示例中看到的那樣,關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)高效且避免重復(fù)。最好的例子就是,支持一組關(guān)系數(shù)據(jù)庫(kù)引擎,包括流行的和。 數(shù)據(jù)庫(kù)就是有組織的存儲(chǔ)應(yīng)用程序數(shù)據(jù),然后查詢(xún)檢索指定需要的那部分。大部分web應(yīng)用程序都采用基于關(guān)系模型的數(shù)據(jù)庫(kù),也稱(chēng)作結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)數(shù)據(jù)庫(kù)。但是最近...
摘要:數(shù)據(jù)庫(kù)關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在表中來(lái)模擬應(yīng)用程序中不同的實(shí)體。這些行之間的連接稱(chēng)作關(guān)系,也是關(guān)系數(shù)據(jù)庫(kù)模型的基礎(chǔ)。就像這個(gè)示例中看到的那樣,關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)高效且避免重復(fù)。最好的例子就是,支持一組關(guān)系數(shù)據(jù)庫(kù)引擎,包括流行的和。 數(shù)據(jù)庫(kù)就是有組織的存儲(chǔ)應(yīng)用程序數(shù)據(jù),然后查詢(xún)檢索指定需要的那部分。大部分web應(yīng)用程序都采用基于關(guān)系模型的數(shù)據(jù)庫(kù),也稱(chēng)作結(jié)構(gòu)化查詢(xún)語(yǔ)言(SQL)數(shù)據(jù)庫(kù)。但是最近...
摘要:程序中最常用的莫過(guò)于關(guān)系型數(shù)據(jù)庫(kù)了,也稱(chēng)數(shù)據(jù)庫(kù)。對(duì)象是類(lèi)的實(shí)例,表示程序使用的數(shù)據(jù)庫(kù)。本文由發(fā)表于個(gè)人博客,采用自由轉(zhuǎn)載保持署名非商用禁止演繹協(xié)議發(fā)布。非商業(yè)轉(zhuǎn)載請(qǐng)注明作者及出處。本文標(biāo)題為插件系列本文鏈接為更多閱讀 簡(jiǎn)介 Web 開(kāi)發(fā)中,一個(gè)重要的組成部分便是數(shù)據(jù)庫(kù)了。Web 程序中最常用的莫過(guò)于關(guān)系型數(shù)據(jù)庫(kù)了,也稱(chēng) SQL 數(shù)據(jù)庫(kù)。另外,文檔數(shù)據(jù)庫(kù)(如 mongodb)、鍵值對(duì)數(shù)據(jù)...
閱讀 3606·2021-11-23 09:51
閱讀 2812·2021-11-23 09:51
閱讀 689·2021-10-11 10:59
閱讀 1685·2021-09-08 10:43
閱讀 3239·2021-09-08 09:36
閱讀 3301·2021-09-03 10:30
閱讀 3306·2021-08-21 14:08
閱讀 2212·2021-08-05 09:59