說到flask中操作數據庫首先要先引入一個概念:ORM
ORM 全拼Object-Relation Mapping.
中文意為 對象-關系映射
其實它就是模型對象的概念,把數據庫的信息映射成一個個對象來操作,
而不需要編寫sql語句,簡單來說就是面向對象編程的概念。
flask 中的SQLAlchemy 就是一個ORM框架,它依賴於pymysql,使用關系對象映射對數據庫進行操作
SQLAlchemy 的安裝命令:
pip install flask-sqlalchemy
下面就用代碼展示使用SQLAlchemy對數據庫進行增刪改查的操作:
# -*- encoding: utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
#導入時間模塊
import datetime,time
#建立對象
app = Flask(__name__)
#建立數據庫對象
db = SQLAlchemy(app)
#導入配置文件
app.config.from_pyfile('config.ini')
#建立數據庫類
class Student(db.Model):
#聲明表名
__tablename__ = 'student'
#id字段
id = db.Column(db.Integer,primary_key=True)
#name字段
name = db.Column(db.String
#password字段
password = db.Column(db.String)
#日期時間字段
shijian = db.Column(db.DateTime)
#日期
date = db.Column(db.Time)
#性別
gender = db.Column(db.Enum)
#身高
height = db.Column(db.DECIMAL)
#文本
con = db.Column(db.Text)
#時間
time = db.Column(db.Time)
@app.route('/')
def index():
#將對象屬性賦值入庫
#將當前的生日期時間格式化為mysql的日期時間格式
student = Student(
shijian = datetime.datetime.now(),
#格式化日期,把時間去掉,只留日期
date = datetime.datetime.now().strftime("%Y-%m-%d"),
#只取時間需要導入time模塊,格式化時間
time = time.strftime('%H:%M:%S')
)
#調用入庫方法
db.session.add(student)
return '入庫操作'
#數據庫的刪除操作
@app.route('/del')
def delt():
#刪除根據某個字段做刪除,filter_by可以理解為where條件限定
#翻譯為 delete from Student where id = 1
Student.query.filter_by(id=3).delete()
return '這里是刪除操作'
#數據庫的修改操作
@app.route('/edit')
def edit_user():
#根據某個字段做修改操作
#翻譯為 update student set name = ‘張三’ where id= 2
Student.query.filter_by(id=4).update({'name':'張三'})
return '這里是修改操作'
#數據庫的查詢操作
@app.route('/select')
def select_user():
#簡單的全量查詢
#翻譯為 select * from student
# ulist = student.query.all()
# print(ulist)
# for item in ulist:
# print(item.name)
#只取一條,沒有last取值方法
#翻譯為select * from user limit 1
ulist = User.query.first()
print(ulist)
if __name__ == "__main__":
app.run()
當然
SQLAlchemy這種對數據庫的操作方法也有弊端,可能有些人也不習慣用,
也可以用原生的sql語句對數據庫進行操作。如:
items = db.session.execute('select * from student order by id')
#將結果集強轉為;list
items = list(items)
print(items)
其中的execute方法是依賴於pymysql進行執行操作的,所以也可以使用原生sql語句操作
