python-3.x 为什么在SqlAlchemy中使用“db.*”?

vatpfxk5  于 2023-01-27  发布在  Python
关注(0)|答案(1)|浏览(128)

我正在用Flask和SqlAlchemy做一个项目。我和我的同事发现了两种定义表的方法。两种方法都有效,但是有什么不同呢?
可能性I

base = declarative_base()

class Story(base):
        __tablename__ = 'stories'
        user_id = Column(Integer, primary_key=True) 
        email = Column(String(100), unique=True)
        password = Column(String(100), unique=True)

可能性II

db = SQLAlchemy()

class Story(db.Model):
        __tablename__ = 'stories'
        user_id = db.Column(Integer, primary_key=True) 
        email = db.Column(String(100), unique=True)
        password = db.Column(String(100), unique=True)

我们想选择一个选项,但是是哪一个呢?很明显,这两个类都继承自不同的父类,但是这两种可能性用于什么呢?

wrrgggsh

wrrgggsh1#

可能性1是原始SQLAlchemy声明性Map。
可能性2是Flask-SQLAlchemy。
这两种方法都以声明的方式将类Map到SQL表(或者SQL中更奇特的东西),也就是说,类被Map到自动生成的表。
然而,选择使用哪一个是一个观点问题。
我要说的是,使用Flask-SQLAlchemy显然会将应用程序锁定到Flask,但这基本上不是问题,因为切换框架非常罕见。

注意。__tablename__对于Flask-SQLAlchemy是可选的。

相关问题