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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM