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

xin*_*158 7 python dao sqlalchemy flask-sqlalchemy data-access-object

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)
Run Code Online (Sandbox Code Playgroud)

我定义了另一个类,UserDao

class UserDao:
    def addNewUser(user):
         pass
    def retrieveAllUsers(user):
         users = User.query.limit(5).all()
Run Code Online (Sandbox Code Playgroud)

我实例化了这个 UserDao 类的对象并调用相应的方法通过相应的方法执行一些数据库操作,这是否使其成为“DAO 模式”?

小智 9

关于你的问题“我实例化了这个 UserDao 类的对象,并调用相应的方法通过相应的方法执行一些数据库操作,这是否使其成为“DAO 模式”?” 我想说是的,就是朝这个方向发展,但是您需要整体审视整个应用程序才能回答这个问题。

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


Ins*_*ark 1

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

参考