成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Flask擴(kuò)展之flask-sqlalchemy(上)

KaltZK / 2939人閱讀

摘要:查詢(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ǔ)句:

常見(jiàn)操作語(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í)。

所有數(shù)據(jù)類(lèi)型

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42881.html

相關(guān)文章

  • Flask擴(kuò)展flask-migrate

    摘要:一個(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...

    Snailclimb 評(píng)論0 收藏0
  • Flask Web Development —— 數(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ù)。但是最近...

    skinner 評(píng)論0 收藏0
  • Flask Web Development —— 數(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ù)。但是最近...

    rockswang 評(píng)論0 收藏0
  • Flask 插件系列 - Flask-SQLAlchemy

    摘要:程序中最常用的莫過(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ù)...

    LoftySoul 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<