我有一个我正在尝试初始化的用户模型,但我不断收到
AttributeError: 'NoneType' 对象没有属性 'set'
经过进一步检查,我了解到 sqlalchemy 将其模型转换为包含 InstrumentedAttribute 属性的映射器,使它们可查询。显然这一切都发生在对象初始化时。
这只发生在用户模型上,没有别的。
我尝试使用 app_context 来查看是否是由于 db 不在范围内。但它没有帮助。
class userData(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(128), nullable=False)
# TODO need to add hashing for the password
password = db.Column(db.String(10), nullable=False)
type = db.Column(db.String(5), nullable=False)
facility_id = db.Column(db.Integer, db.ForeignKey('facility.id'), nullable=True)
auth_hash = db.Column(db.String, nullable=True)
def __init__(self, *args, **kwargs) -> None:
super(userData, self).__init__(*args, **kwargs)
def __getattr__(self, item):
if item is 'facility':
facility = facilityData.query.filter(facilityData.id == self.facility_id).first()
if facility is None:
return "No Facility Found"
else:
return facility.facility_name
作为参考,这个工作得很好:
class barcodeData(db.Model):
__tablename__ = 'barcodes'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
barcode = db.Column(db.String(128), nullable=False)
medid = db.Column(db.String(128), nullable=False)
user = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True)
def __init__(self, data):
'''class constructor'''
self.barcode = data.get('barcode')
self.medid = data.get('medid')
self.user = data.get('user')
这是我尝试创建新的 userData 对象时遇到的错误。
import models
import app
with app.app.app_context():
models.userData(name='admin2', password='test2', facility_id=1)
我什至在没有 app_context() 的情况下尝试了另一种方式,然后专门从模型中导入 userData。还尝试在每次迭代中交替使用 app_context。
烙印99
相关分类