国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python大佬養(yǎng)成計劃----flask_sqlalchemy操作數(shù)據(jù)庫

RdouTyping / 596人閱讀

摘要:使用對象關(guān)系映射框架,它將低層的數(shù)據(jù)庫操作指令抽象成高層的面向?qū)ο蟛僮鳌T谥校瑪?shù)據(jù)庫使用指定。安裝對數(shù)據(jù)庫操作如何創(chuàng)建數(shù)據(jù)庫操作連接為了創(chuàng)建初始數(shù)據(jù)庫,調(diào)用方法來創(chuàng)建表和數(shù)據(jù)庫您的數(shù)據(jù)庫已經(jīng)生成。最為常見的關(guān)系就是一對多的關(guān)系。

flask_sqlalchemy

使用對象關(guān)系映射(Object-Relational Mapper, ORM)框架,它將低層的數(shù)據(jù)庫操作指令抽象成高層的面向?qū)ο蟛僮鳌R簿褪钦f,如果我們直接使用數(shù)據(jù)庫引擎,我們就要寫 SQL 操作語句,但是,如果我們使用了 ORM 框架,我們對諸如表、文檔此類的數(shù)據(jù)庫實體就可以簡化成對 Python 對象的操作

SQLAlchemy已經(jīng)成為了python世界里面orm的標(biāo)準(zhǔn),flask是一個輕巧的web框架,可以自由的使用orm,其中flask-sqlalchemy是專門為flask指定的插件。

在 Flask-SQLAlchemy 中,數(shù)據(jù)庫使用 URL 指定。

MySQL -->  mysql://username:password@hostname/database

安裝

 pip install flask-sqlalchemy
對數(shù)據(jù)庫操作 1. 如何創(chuàng)建數(shù)據(jù)庫操作連接
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:sheen@localhost/zaj_sql"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

為了創(chuàng)建初始數(shù)據(jù)庫,調(diào)用 SQLAlchemy.create_all() 方法來創(chuàng)建表和數(shù)據(jù)庫:

   db.create_all()

您的數(shù)據(jù)庫已經(jīng)生成。現(xiàn)在來創(chuàng)建一些用戶

admin = User("admin", "admin@example.com")
guest = User("guest", "guest@example.com")

但是它們還沒有真正地寫入到數(shù)據(jù)庫中,因此讓我們來確保它們已經(jīng)寫入到數(shù)據(jù)庫中

db.session.add(admin)
db.session.add(guest)
db.session.commit()
2.創(chuàng)建關(guān)系型數(shù)據(jù)庫表

SQLAlchemy 連接到關(guān)系型數(shù)據(jù)庫,關(guān)系型數(shù)據(jù)最擅長的東西就是關(guān)系。因此,我們將創(chuàng)建一個使用兩張相互關(guān)聯(lián)的表的應(yīng)用作為例子。
最為常見的關(guān)系就是一對多的關(guān)系。因為關(guān)系在它們建立之前就已經(jīng)聲明,您可以使用 字符串來指代還沒有創(chuàng)建的類
關(guān)系使用 relationship() 函數(shù)表示。然而外鍵必須用類 sqlalchemy.schema.ForeignKey 來多帶帶聲明.

from datetime import datetime
from flask_bootstrap import Bootstrap
from flask_wtf import FlaskForm
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
import pymysql
from sqlalchemy import desc

app = Flask(__name__)
db = SQLAlchemy(app)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:sheen@localhost/zaj_sql"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
bootstrap = Bootstrap(app)

class User(db.Model):
    id = db.Column(db.Integer,autoincrement=True,primary_key=True)
    name = db.Column(db.String(50),unique=True)
    passwd = db.Column(db.String(100))
    add_time = db.Column(db.DATETIME,default=datetime.now())
    gender = db.Column(db.BOOLEAN,default=True)
    role_id = db.Column(db.INTEGER,db.ForeignKey("role.id"))

    def __repr__(self):
        return "" %(self.name)

class Role(db.Model):
    id = db.Column(db.INTEGER,autoincrement=True,primary_key=True)
    name = db.Column(db.String(50),unique=True)
    users = db.relationship("User",backref="role")
    # 給Role模型添加users屬性
    # backref 是定義反向引用
        def __repr__(self):
        return "" % (self.name)
if __name__ =="__main__":
    # 1. 創(chuàng)建數(shù)據(jù)庫表
    # db.drop_all()
    # db.create_all()
    # # 2. 創(chuàng)建role數(shù)據(jù)庫表數(shù)據(jù)
    role_1 = Role(name="超級會員")
    role_2 = Role(name="普通會員")

    db.session.add(role_1)
    db.session.add(role_2)

    db.session.commit()

    # # # 3. 添加user表內(nèi)數(shù)據(jù),100個用戶,50個為超級會員,50個為普通會員
    for i in range(1,13):
        if i%2 == 0:
            u = User(name="sheen"+str(i),passwd="sheen",role_id=1)
            db.session.add(u)
        else:
            u = User(name="star"+str(i),passwd="star",role_id=2)
            db.session.add(u)
    db.session.commit()

backref 是定義反向引用,可以通過User.role訪問Role對象和屬性。


查詢所有數(shù)據(jù)

    print("角色",Role.query.all())
    print("用戶",User.query.all())

根據(jù)條件查詢數(shù)據(jù)

    # select * from tablename where xxx=xxxxx
    print(User.query.filter_by(role_id=1).all())
    print(Role.query.filter_by().all())
    print(User.query.filter_by(role_id=2).all())


對于找到的數(shù)據(jù)進行更新

 print("進行數(shù)據(jù)更新",end="
")
    u =User.query.filter_by(name="sheen2").first()
    print(u)
    u.passwd = "123"
    db.session.add(u)
    db.session.commit()


篩選數(shù)據(jù)方法2(filter),這種方法可以看見原生的sql語句

    print("數(shù)據(jù)篩選", end="
")
    user = User.query.filter(User.role_id==1)
    print(user)
    


對于查詢的信息進行顯示限制

    print("限制查詢數(shù)據(jù)的顯示", end="
")

    users = User.query.filter_by(role_id=1).limit(3).all()
    print(users)

對于查詢的信息進行排序輸出(默認(rèn)情況由小到大進行排序), 如果想要由大到小: desc(User.add_time)

    print("數(shù)據(jù)再處理", end="
")
    users = User.query.filter_by(role_id=1).order_by(desc(User.name)).all()
    print(users)

多個過濾函數(shù)

print("多個過濾函數(shù)", end="
")
    users = User.query.filter_by(role_id=1).order_by(desc(User.name)).limit(3).offset(1).all()
    print(users)
    users = User.query.filter_by(role_id=1).order_by(desc(User.name)).slice(1,4).all()
    print(users)


分頁,第一個參數(shù)表示顯示第幾頁數(shù)據(jù),第二個參數(shù)表示每頁顯示多少條數(shù)據(jù)

    print("分頁顯示", end="
")

    users = User.query.paginate(1,5)
    print(users.items)
    users = User.query.paginate(2, 5)
    print(users.items)

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44887.html

相關(guān)文章

  • python大佬養(yǎng)成計劃----基于flask_sqlalchemy的網(wǎng)頁顯示數(shù)據(jù)庫信息

    摘要:網(wǎng)頁顯示數(shù)據(jù)庫信息使用我們剛學(xué)習(xí)的,在網(wǎng)頁中顯示數(shù)據(jù)庫表中的數(shù)據(jù)。在開始運行程序前,確保數(shù)據(jù)庫中執(zhí)行過創(chuàng)建表和創(chuàng)建用戶的操作,詳見鏈接描述。 網(wǎng)頁顯示數(shù)據(jù)庫信息 使用我們剛學(xué)習(xí)的flask_sqlalchemy,在網(wǎng)頁中顯示數(shù)據(jù)庫表中的數(shù)據(jù)。在開始運行程序前,確保數(shù)據(jù)庫中執(zhí)行過創(chuàng)建表和創(chuàng)建用戶的操作,詳見鏈接描述。 # 模板文件templates/list.html {% extend...

    cppowboy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<