首頁 >後端開發 >Python教學 >python中flask_sqlalchemy操作資料庫的方法範例

python中flask_sqlalchemy操作資料庫的方法範例

不言
不言轉載
2018-11-15 14:06:294687瀏覽

本篇文章帶給大家的內容是關於python中flask_sqlalchemy操作資料庫的方法範例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

flask_sqlalchemy

使用物件關係映射(Object-Relational Mapper, ORM)框架,它將低層的資料庫操作指令抽象化成高層的物件導向操作。也就是說,如果我們直接使用資料庫引擎,我們就要寫SQL 操作語句,但是,如果我們使用了ORM 框架,我們對諸如表、文檔此類的資料庫實體就可以簡化成對Python 物件的操作

SQLAlchemy已經成為了python世界裡面orm的標準,flask是一個輕巧的web框架,可以自由的使用orm,其中flask-sqlalchemy是專門為flask指定的插件。

在 Flask-SQLAlchemy 中,資料庫使用 URL 指定。

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

安裝

 pip install flask-sqlalchemy

對資料庫操作

#1. 如何建立資料庫操作連線

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)

#為了建立初始資料庫,呼叫SQLAlchemy.create_all() 方法來建立表格和資料庫:

   db.create_all()

您的資料庫已經產生。現在來創建一些用戶

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

但是它們還沒有真正地寫入到資料庫中,因此讓我們來確保它們已經寫入到資料庫中

db.session.add(admin)
db.session.add(guest)
db.session.commit()

2.創建關係型資料庫表

SQLAlchemy 連結到關係型資料庫,關係型資料最擅長的東西就是關係。因此,我們將建立一個使用兩張相互關聯的表的應用作為範例。
最常見的關係就是一對多的關係。因為關係在它們建立之前就已經聲明,您可以使用 字串來指稱還沒有創建的類別
關係使用 relationship() 函數表示。然而外鍵必須用類別 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 '<user:>' %(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 '<role:>' % (self.name)
if __name__ =='__main__':
    # 1. 创建数据库表
    # db.drop_all()
    # db.create_all()
    # # 2. 创建role数据库表数据
    role_1 = Role(name='超级会员')
    role_2 = Role(name='普通会员')

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

    db.session.commit()

    # # # 3. 添加user表内数据,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()</role:></user:>

backref 是定義反向引用,可以透過User.role存取Role物件和屬性。
python中flask_sqlalchemy操作資料庫的方法範例

python中flask_sqlalchemy操作資料庫的方法範例

查詢所有資料

    print('角色',Role.query.all())
    print('用户',User.query.all())

根據條件查詢資料

    # 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())

python中flask_sqlalchemy操作資料庫的方法範例

對於找到的資料進行更新

 print('进行数据更新',end='\n')
    u =User.query.filter_by(name='sheen2').first()
    print(u)
    u.passwd = '123'
    db.session.add(u)
    db.session.commit()

python中flask_sqlalchemy操作資料庫的方法範例

篩選資料方法2(filter),這種方法可以看見原生的sql語句

    print('数据筛选', end='\n')
    user = User.query.filter(User.role_id==1)
    print(user)

python中flask_sqlalchemy操作資料庫的方法範例

#對於查詢的資訊進行顯示限制

    print('限制查询数据的显示', end='\n')

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

對於查詢的資訊進行排序輸出(預設情況由小到大進行排序), 如果想要由大到小: desc(User. add_time)

    print('数据再处理', end='\n')
    users = User.query.filter_by(role_id=1).order_by(desc(User.name)).all()
    print(users)

多個過濾函數

print('多个过滤函数', end='\n')
    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)

python中flask_sqlalchemy操作資料庫的方法範例

#分頁,第一個參數表示顯示第幾頁數據,第二個參數表示每頁顯示多少條資料

    print('分页显示', end='\n')

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

python中flask_sqlalchemy操作資料庫的方法範例

#

以上是python中flask_sqlalchemy操作資料庫的方法範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除