• Flask ~~“一见钟情之初体验”(Flask-SQLAlchemy的安装设置及数据库的基本使用操作----增~删~改~查)


    经过几天的了解我们以及对Flask有了初步的认识,在学习完表单后我们来看看数据库,数据库想必都不陌生吧,但是在python中我们可以用pymysql来链接,但在Flask中我们如何来链接数据库呢?首先在连接数据库前先引入一个SQLAlchemy,我来介绍介绍。

    SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升

    SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。

    下面来说一个如何安装SQLAlchemy :


    安装 flask-sqlalchemy:

    pip install flask-sqlalchemy

    如果连接的是 mysql 数据库,需要安装 mysqldb:

    pip install flask-mysqldb

    数据库可想而知,肯定离不开增~删~改~查,下边来简单介绍一下:

    上代码:

    # -*- encoding: utf-8 -*-
    
    from flask import Flask,render_template
    #导入第三方链接库aql点金数
    from flask_sqlalchemy import SQLAlchemy
    
    #建立对象
    
    app=Flask(__name__)
    
    #载入配置文件
    
    app.config.from_pyfile('config.ini')
    
    #指定数据库链接还有库名
    # app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:mysql@127.0.0.1:3306/myflask?charset=utf8'
    
    #指定配置,用来省略提交操作,也可以放在配置文件中更简单
    # app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    
    #建立数据库对象
    db = SQLAlchemy(app)
    
    #建立数据库,用来映射数据库表,将数据库的模型作为参数传入
    class User(db.Model):
        #声明表明
        __tablename__ = 'user'
        #建立字段函数
        id = db.Column(db.Integer,primary_key = True)
        name = db.Column(db.String(200))
        password = db.Column(db.String(200))
                                
    
    #数据库的查询操作(查)
    @app.route('/select')
    def select_user():
        #简单的全量查询
        #翻译为 select * from user
        # ulist = User.query.all()
        # for i in ulist:
        #     print(i.name)
    
        # #只取一条
        # #翻译为 select * from user limit 1
        # ulist = User.query.first()
        # print(ulist.name)
    
    
    
        #使用原生的sql语句(查)
        #翻译为 select * from user order by id desc limit 1,2
        item = db.session.execute('select * from user order by id desc limit 1,2')
        #将结果集强转为list
        item = list(item)
        print(item)
    
    
        #使用原生语句进行修改操作
        # db.session.execute('update user set password ="321000" where id = 6 ')
        #将动态数据传输给模板
        return render_template('sql.html',item=item)
       这里跳转的的网页又自己随意定义一个模块 #数据库的修改操作(改) @app.route('/edit') def edit_user(): #根据字段做修改操作 #翻译为 update user set name='张三' where id=4 User.query.filter_by(id = 4).update({'name':'张三'}) return '这里是修改' #数据库的删除操作(删) @app.route('/del') def del_user(): #根据某个字段做删除,filter_by 可以理解为where条件限定 #翻译为 delete from user where id=1 User.query.filter_by(id = 3).delete() User.query.filter_by() return '这里是删除操作' #数据库的入库操作(增) @app.route('/') def index(): #增,入库逻辑 #声明对象 user = User(name='隔壁老王',password='123123') #调用添加方法 db.session.add(user) #提交入库 # db.session.commit() return '这里是首页' if __name__ == "__main__": app.run()

    上边代码中提到了return中返回的模板文件,实现动态的数据展示,简单代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>动态数据展示</title>
        <style>
        table{
            background-color:blueviolet;
            border: solid 3px gold;
            padding: 10px;
            
        }
    
        </style>
    </head>
    <body>
    
        <table>
            {# 对数据进行p遍历输出 #}
    
            {% for i in item%}
    
                <tr>
                    <td>{{i.id}}</td>
                </tr>
    
                <tr>
                    <td>{{i.name}}</td>
                </tr>
    
                <tr>
                    <td>{{i.password}}</td>
                </tr>
    
            {% endfor %}
    
        </table>
    
    
    </body>
    </html>

    注:

    以上就是flask连接数据库的增删改查

    以上又两种数据库的增删改查,SQLAlchemy如果不习惯可以选择原生的代码

    原生的格式为 :

    item = db.session.execute('sql语句')
     

    总结:

     
    SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
     

    优点 :

    只需要面向对象编程, 不需要面向数据库编写代码.
       对数据库的操作都转化成对类属性和方法的操作.
       不用编写各种数据库的sql语句.
    实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.
       不在关注用的是mysql、oracle...等.
       通过简单的配置就可以轻松更换数据库, 而不需要修改代码.

    缺点 :

    相比较直接使用SQL语句操作数据库,有性能损失.
    根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失。
  • 相关阅读:
    [HNOI2015]亚瑟王(概率dp)
    [IOI1998]Polygon(区间dp)
    [SCOI2003]字符串折叠(区间dp)
    [BJOI2006]狼抓兔子(网络流)
    [NOIP2017普及组]跳房子(二分,单调队列优化dp)
    洛谷 P2863 [USACO06JAN]牛的舞会The Cow Prom(Tarjan)
    [SCOI2010]股票交易(单调队列优化dp)
    [POJ1821]Fence(单调队列优化dp)
    [Luogu2365]任务安排(斜率优化)
    股神小L
  • 原文地址:https://www.cnblogs.com/sashao/p/10173096.html
Copyright © 2020-2023  润新知