flask 数据库操作

 

说到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语句操作

 

 

posted @ 2018-12-26 20:34  sobig  阅读(1028)  评论(0编辑  收藏  举报