zoukankan      html  css  js  c++  java
  • flask_sqlalchemy和sqlalchemy的区别有哪些?

    概要的说:

      SQLAlchemy是python社区使用最广泛的ORM之一,SQL-Alchmy直译过来就是SQL炼金术。

      Flask-SQLAlchemy集成了SQLAlchemy,它简化了连接数据库服务器、管理数据库操作会话等各类工作,让Flask中的数据处理体验变得更加轻松。

      

      虽然我们要使用的大部分类和函数都由SQLAlchmey提供,但在Flask-SQLAlchemy中,大多数情况下,我们不需要手动从SQLAlchemy导入类或函数。在sqlalchemy和sqlalchemy.orm模块中实现的类和函数

    ,以及其他几个常用的模块和对象都可以作为db对象的属性调用。当我们创建这样的调用时,Flask-SQLAlchemy会自动把这些调用转发到对应的类、函数或模块

    具体区别:

    区别1:定义模型:

    flask_sqlalchemy需要使用db.Column,而sqlalchemy则不需要 

    flask_sqlalchemy写法:

    1 class Role(db.Model):
    2     __tablename__ = 'roles'
    3     id = db.Column(db.Integer, primary_key=True)
    4     name = db.Column(db.String(64))
    5     user = db.relationship('User', backref='role')
    6 
    7     def __repr__(self):
    8         return '<Role %r>' % self.name

     

    sqlalcehmy写法:

    1 class EnvConfig(Base):
    2     __tablename__="env_config"
    3     id=Column(Integer,primary_key=True)
    4     host = Column(String(50))  # 默认值 1  0:appapi.5i5j.com,
    5     def __repr__(self):
    6         return "<EnvConfig.%s>"%self.host

     区别2:声明字段类型

    flask_sqlalchemy使用定义字段类型时无须额外导入类型,一切类型都通过db对象直接调用

     1 from flask import Flask
     2 from flask_sqlalchemy import SQLAlchemy
     3 
     4 app = Flask(__name__)
     5 
     6 # 设置连接数据库的URL
     7 # 不同的数据库采用不同的引擎连接语句:
     8 # MySQL: mysql://username:password@hostname/database
     9 
    10 app.config['SQLALCHEMY_DATABASE_URI'] ='mysql+mysqlconnector://root:admin123456@10.1.71.32:3306/test'
    11 
    12 # 设置每次请求结束后会自动提交数据库的改动
    13 app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    14 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    15 
    16 # 查询时显示原始SQL语句
    17 app.config['SQLALCHEMY_ECHO'] = False
    18 db = SQLAlchemy(app)

     

    sqlalchemy需要单独导入字段声明类型:

    1 from sqlalchemy.ext.declarative import declarative_base
    2 from sqlalchemy import Column,Integer,Text,String,Enum
    3 Base =declarative_base()

    完整的代码片断:

    # 导入依赖
    from sqlalchemy import Column, String, create_engine
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    
    # 创建对象的基类
    Base = declarative_base()
    
    # 定义User对象
    class User(Base):
        # 表的名字
        __tablename__ = 'user'
    
        # 表的结构
        id = Column(String(20), primary_key=True)
        name = Column(String(20))
    
    
    # 初始化数据库链接
    engine = create_engine('mysql+mysqlconnector://root:123456@localhost:3306/test')
    
    # 创建DBSession类型
    DBSession = sessionmaker(bind=engine)
    
    
    # 添加
    # 创建Session对象
    session = DBSession()
    # 创建User对象
    new_user = User(id='5', name='Bob')
    # 添加到session
    session.add(new_user)
    # 提交
    session.commit()
    # 关闭session
    session.close()
    
    
    # 查询
    # 创建session
    session = DBSession()
    # 利用session创建查询,query(对象类).filter(条件).one()/all()
    user = session.query(User).filter(User.id=='5').one()
    print('type:{0}'.format(type(user)))
    print('name:{0}'.format(user.name))
    # 关闭session
    session.close()
    
    
    # 更新
    session = DBSession()
    user_result = session.query(User).filter_by(id='1').first()
    user_result.name = "jack"
    session.commit()
    session.close()
    
    
    # 删除
    session = DBSession()
    user_willdel = session.query(User).filter_by(id='5').first()
    session.delete(user4._willdel)
    session.commit()
    session.close()

     

    区别3:

    查询方式不一样

    sqlalchemy通过session.query(模型名)查询

    而flask_sqlalchemy则是通过 模型名.query查询

    #SQLAlchemy 
    result_id = session.query(ScriptRunResult).order_by(ScriptRunResult.id.desc()).all()[0].id
                result_id = 
    #Flask-SQLAlchemy 
    ScriptRunResult.query.order_by(ScriptRunResult.id.desc()).all()[0].id
  • 相关阅读:
    ES6走一波 Generator异步应用
    扁平数据结构化
    Django笔记&教程 6-2 表单(Form)基础操作
    Django笔记&教程 6-3 使用模型(models)创建表单(form)
    Django笔记&教程 6-4 forms进阶操作,重写forms方法
    Django笔记&教程 7-1 基于类的视图(Class-based views)介绍
    Django笔记&教程 7-3 拓展CBVs(Class-based views)
    Django笔记&教程 5-1 基础增删查改
    Django笔记&教程 1-1 一 新建项目
    Django笔记&教程 0-2 框架版本与相关工具
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11412913.html
Copyright © 2011-2022 走看看