zoukankan      html  css  js  c++  java
  • 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语句操作

     

  • 相关阅读:
    【STM32F429】第11章 ThreadX中断优先级配置,含BasePri配置方案
    【STM32H7】第10章 ThreadX任务栈大小确定及其溢出检测
    【STM32F429】第10章 ThreadX任务栈大小确定及其溢出检测
    《安富莱嵌入式周报》第216期:2021.06.07--2021.06.13
    嵌入式新闻早班车-第3期
    嵌入式新闻早班车-第2期
    Keil Studio已经确定为MDK下一代开发工具,更多功能将在今年年底上线
    嵌入式新闻早班车-第1期
    【STM32H7的DSP教程】第32章 STM32H7的实数FFT的逆变换(支持单精度和双精度)
    【STM32F429的DSP教程】第32章 STM32F429的实数FFT的逆变换(支持单精度和双精度)
  • 原文地址:https://www.cnblogs.com/ssjz12/p/10181615.html
Copyright © 2011-2022 走看看