使用SQLAlchemy时从类访问外部变量?

时间:2018-12-07 00:16:44

标签: python

在以下代码段中:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Flight(db.Model):
    __tablename__ = "flights"
    id = db.Column(db.Integer, primary_key=True)
    origin = db.Column(db.String, nullable=False)
    destination = db.Column(db.String, nullable=False)
    duration = db.Column(db.Integer, nullable=False)

    def add_passenger(self, name):
        p = Passenger(name=name, flight_id=self.id)
        db.session.add(p)
        db.session.commit()

为什么没有db的类中的global可以用作全局变量?我检查了python doc,发现:

  

在Python中,仅在函数内部引用的变量是隐式全局的。

我想知道这条规则在这里适用吗?因为db不仅被add_passenger方法引用,而且被修改。

1 个答案:

答案 0 :(得分:0)

您未在任何函数内为变量db分配任何内容。

add_passenger仅调用一个方法。它仅更改内部状态,而不更改引用本身。

如果您这样做

db = SQLAlchemy() 

在函数内部,则需要使用global,否则,您将仅在本地范围获得另一个名为db的变量,并且使用它不会对全局{ {1}}个对象。