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

7
Python(Flask)SQLAlchemy使用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模式"呢?

2个回答

8
关于你的问题“我实例化了这个UserDao类的一个对象,并调用了相应的方法来执行一些数据库操作,这样做是否构成了”DAO模式“?” 我认为是的,但是你需要全面考虑你整个应用程序来回答这个问题。
DAO的思想是将负责处理业务逻辑的代码与处理数据获取和存储的代码分开。因此,最简单的回答你的问题的方式是看整个应用程序,并问自己:“如果明天我想使用mongodb(例如)而不是mysql(无论您是否使用sqlachemy),我需要更改我的应用程序中的哪些代码?” 如果需要更改业务逻辑代码,则意味着你没有dao或者至少不够强大。如果只需要修改处理数据库操作的代码,则已经有DAO了。你也可以从另一个角度思考:如果明天你决定使用django而不是sqlachemy,那么你需要更改什么代码?你需要更改处理业务逻辑的代码吗?

1

Sqlalchemy 实现了仓储模式(repository pattern),而非数据访问对象模式(dao pattern)。
在使用 sqlalchemy 时,您不需要在代码中实现任何 dao 类。
使用 sqlalchemy orm 的 session(或基于 db.model 的类)意味着您正在使用仓储(repository)。

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接