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