本篇文章帶給大家的內容是關於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物件和屬性。
查詢所有資料
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())
對於找到的資料進行更新
print('进行数据更新',end='\n') u =User.query.filter_by(name='sheen2').first() print(u) u.passwd = '123' db.session.add(u) db.session.commit()
篩選資料方法2(filter),這種方法可以看見原生的sql語句
print('数据筛选', end='\n') user = User.query.filter(User.role_id==1) print(user)
#對於查詢的資訊進行顯示限制
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)
#分頁,第一個參數表示顯示第幾頁數據,第二個參數表示每頁顯示多少條資料
print('分页显示', end='\n') users = User.query.paginate(1,5) print(users.items) users = User.query.paginate(2, 5) print(users.items)
以上是python中flask_sqlalchemy操作資料庫的方法範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!