Python Flask SQLAlchemy中的数据访问对象(DAO)



Python (Flask) SQL Alchemy同时使用DAO和ORM设计,还是仅仅使用ORM?我正在学习设计策略,我想到了SQLAlchemy。它也被认为是DAO(显然是ORM)吗?

默认情况下,它看起来不像DAO。

如果我为一个现有的模型类定义了一个类,例如我有以下的类:

class User(db.model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), unique=True, nullable=False)
verified= db.Column(db.String(5), unique=False, nullable=False)

我定义另一个类UserDao

class UserDao:
def addNewUser(user):
pass
def retrieveAllUsers(user):
users = User.query.limit(5).all()

并且我实例化了这个UserDao类的对象,并调用了各自的方法,通过各自的方法做一些数据库操作,这是否使它成为一个"DAO模式"?

关于你的问题"并且我实例化了这个UserDao类的一个对象,并调用了相应的方法,通过相应的方法做一些数据库操作,这是否使它成为一个DAO模式?"我会说是的,它是朝着这个方向发展的,但是你需要从整体上看你的整个应用程序来回答这个问题。

DAO的思想是将应用程序中执行业务逻辑的代码与处理如何获取和存储数据的代码分开。所以最简单的方法来回答你的问题是看看你的整个应用程序,并问自己"如果明天我想与mongodb(例如)而不是mysql(无论你是否使用sqlchemy)我的应用程序的什么代码我需要改变?"。如果您需要更改业务逻辑代码中的代码,那么这意味着您没有dao,或者至少不是一个强大的dao。如果您只需要接触处理数据库操作的代码,那么您就有了DAO。你也可以从另一个角度来看待它:如果明天你决定使用django而不是sqlchemy会更好呢?您需要更改哪些代码?您需要修改执行业务逻辑的代码吗?

Sqlalchemy实现的是存储库模式,而不是dao模式。
使用sqlalchemy时,不必在代码中实现任何dao类。
使用sqlalchemy formsession(或基于db.model的类)意味着使用了存储库。

引用

  • https://techspot.zzzeek.org/2012/02/07/patterns-implemented-by-sqlalchemy/

最新更新