摘要:查詢記錄在調試或測試模式自動啟用??梢杂糜陲@式禁用原生支持。當使用不合適的指定無編碼的數據庫默認值時,這對于一些數據庫適配器是必須的比如上某些版本的。這對是必要的,它默認移除閑置多于小時的連接。注意如果使用了,自動設定這個值為小時。
flask-sqlalchemy是flask的一個ORM擴展框架,這個擴展在sqlalchemy的進行的擴展,更方便的結合Flask.
什么是ORM?
其是Object Relational Mapping的縮寫,中文:對象關系映射,說白了就是程序中的實體類通過ORM可以映射成為數據庫中的表,方便我們通過程序的方式操作數據表,這里就包括數據表的生成、刪除、關系創建及表記錄的增刪改查。
【config.py】
SQLALCHEMY_DATABASE_URI="mysql://root:mysql@127.0.0.1:3306/test" //數據庫連接 SQLALCHEMY_TRACK_MODIFICATIONS=False
上面兩項是必配置的屬性,否則程序將不能正常運行:所有配置鍵見最后
【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" #指定表名,默認模型類小寫 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數據庫下就生成了一張user表,是不是很簡單。
在進行數據的增刪改查之前,我們先來看一下常用的操作語句:
db.session.add(obj) 添加對象
db.session.add_all([obj1,obj2,..]) 添加多個對象
db.session.delete(obj) 刪除對象
db.session.commit() 提交會話
db.session.rollback() 回滾
db.session.remove() 移除會話
增加數據>>>from create_sur import db,User >>>user1=User(name="jim") >>>db.session.add(user1) >>>db.session.commit() //添加一條數據 >>>user2=User(name="sam") >>>user3=User(name="alice") >>>db.session.add_all([user2,user3]) //批量添加數據 >>>db.session.commit()查詢數據
>>>from create_sur import db,User >>>user_all=User.query.all() //查詢所有數據 >>>user=User.query.filter_by(name="jim").all() //查詢name為jim的數據 >>>user=User.query.filter(User.name="sam").first() //查詢name為sam的數據
常用過濾函數:
常用查詢函數:
刪除數據//在查詢數據的基礎上 >>>db.session.delete(obj) //obj為查詢后的數據對象 >>>db.session.commit()更新數據
//在查詢數據的基礎上通過修改對象的屬性然后再添加達到更新的作用 >>>user=User.query.filter(User.name="sam").first() //查詢數據 >>>user.name="sam_two" >>>db.session.add(user) >>>db.session.commit()
上面是一些簡單的小例子,接下來我們寫一個有外鍵關系的兩個表的例子:
【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" # 定義列對象 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), unique=True) #設置關系屬性,方便查詢使用 us = db.relationship("User", backref="role") #重寫__repr__方法,方便查看對象輸出內容 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
上述有兩個重點:
使用ForeignKey義外鍵屬性
使用relationship方法定義兩表的關系
接下來我們測試一下這兩個方法的作用:
添加一些數據: >>>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() 測試一下查詢: >>>from create_sur2 import User,Role >>>role=Role.query.get(1) >>>role.User.all() [User:wang,User:zhou] 這里之所以可以找到就是因為relationship通過外鍵作用實現的 >>>user=User.query.get(3) >>>user.role [Role:user] 這里之所以可以找到就是因為relationship的backref參數值實現的所有配置清單
SQLALCHEMY_DATABASE_URI 用于連接的數據庫 URI
SQLALCHEMY_BINDS 一個映射 binds 到連接 URI 的字典
SQLALCHEMY_ECHO 如果設置為Ture, SQLAlchemy 會記錄所有 發給 stderr 的語句,這對調試有用。(打印sql語句)
SQLALCHEMY_RECORD_QUERIES 可以用于顯式地禁用或啟用查詢記錄。查詢記錄 在調試或測試模式自動啟用。更多信息見get_debug_queries()。
SQLALCHEMY_NATIVE_UNICODE 可以用于顯式禁用原生 unicode 支持。當使用 不合適的指定無編碼的數據庫默認值時,這對于 一些數據庫適配器是必須的(比如 Ubuntu 上 某些版本的 PostgreSQL )。
SQLALCHEMY_POOL_SIZE 數據庫連接池的大小。默認是引擎默認值(通常 是 5 )
SQLALCHEMY_POOL_TIMEOUT 設定連接池的連接超時時間。默認是 10 。
SQLALCHEMY_POOL_RECYCLE 多少秒后自動回收連接。這對 MySQL 是必要的, 它默認移除閑置多于 8 小時的連接。注意如果 使用了 MySQL , Flask-SQLALchemy 自動設定 這個值為 2 小時。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42881.html
摘要:一個用來做數據遷移的擴展,一般都是結合使用,在上一篇文章中我也介紹了這個擴展,需要的小伙伴可以看一下,后續我會將更深層的寫出來。 flask-migrate一個用來做數據遷移的falsk擴展,一般都是結合flask-sqlalchemy使用,在上一篇文章中我也介紹了這個擴展,需要的小伙伴可以看一下,后續我會將flask-sqlalchemy更深層的寫出來。【config.py】 SQL...
摘要:數據庫關系數據庫將數據保存在表中來模擬應用程序中不同的實體。這些行之間的連接稱作關系,也是關系數據庫模型的基礎。就像這個示例中看到的那樣,關系數據庫存儲數據高效且避免重復。最好的例子就是,支持一組關系數據庫引擎,包括流行的和。 數據庫就是有組織的存儲應用程序數據,然后查詢檢索指定需要的那部分。大部分web應用程序都采用基于關系模型的數據庫,也稱作結構化查詢語言(SQL)數據庫。但是最近...
摘要:數據庫關系數據庫將數據保存在表中來模擬應用程序中不同的實體。這些行之間的連接稱作關系,也是關系數據庫模型的基礎。就像這個示例中看到的那樣,關系數據庫存儲數據高效且避免重復。最好的例子就是,支持一組關系數據庫引擎,包括流行的和。 數據庫就是有組織的存儲應用程序數據,然后查詢檢索指定需要的那部分。大部分web應用程序都采用基于關系模型的數據庫,也稱作結構化查詢語言(SQL)數據庫。但是最近...
摘要:程序中最常用的莫過于關系型數據庫了,也稱數據庫。對象是類的實例,表示程序使用的數據庫。本文由發表于個人博客,采用自由轉載保持署名非商用禁止演繹協議發布。非商業轉載請注明作者及出處。本文標題為插件系列本文鏈接為更多閱讀 簡介 Web 開發中,一個重要的組成部分便是數據庫了。Web 程序中最常用的莫過于關系型數據庫了,也稱 SQL 數據庫。另外,文檔數據庫(如 mongodb)、鍵值對數據...
閱讀 3593·2021-11-23 09:51
閱讀 2795·2021-11-23 09:51
閱讀 676·2021-10-11 10:59
閱讀 1672·2021-09-08 10:43
閱讀 3223·2021-09-08 09:36
閱讀 3289·2021-09-03 10:30
閱讀 3293·2021-08-21 14:08
閱讀 2195·2021-08-05 09:59