在 app.cli.command() 下创建时,Flask-sqlalchemy 会话不获取数据

问题描述 投票:0回答:1
engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI'])
Base.metadata.bind = engineDBSession = sessionmaker(bind=engine)

@app.cli.command("generate_task_notifications")
def createTaskNotification(): # Run scheduled job for creating task
    statuses.print('starting jobs')
    generate_task_notifications()
    print('scheduled jobs executed at '+ str(datetime.now()))
    return

def generate_task_notifications():
    session = DBSession()
    upcoming_days_upto = int(session.query(SystemConfig).filter(SystemConfig.Key == e_SysConfig.UpcomingDay.Key).first().Value)
    session.close()
    return upcoming_days_upto

如果我运行与API端点相同的命令,那么它工作正常,但是当我尝试使用与flask命令相同的命令时,coming_days_upto会给出错误

AttributeError: 'NoneType' object has no attribute 'Value'

虽然数据库中有数据,但我使用 beekeeper studio 检查了相同的数据,因为我正在容纳 sqlite 数据库。

我尝试在 cli 命令函数内移动会话创建代码,但我很不幸,当尝试与 API 端点运行相同的代码时,它工作正常。

python flask sqlalchemy orm flask-sqlalchemy
1个回答
0
投票

这表明您的查询结果是

None
。因此,
Value
不是属性,因为
None
类型没有名为
Value
的属性。

您应该有条件地执行:

def generate_task_notifications():
    session = DBSession()
    res = session.query(SystemConfig).filter(SystemConfig.Key == e_SysConfig.UpcomingDay.Key).first()
    if res is not None:
        upcoming_days_upto = int(res.Value)
    session.close()
    return upcoming_days_upto

这确实避免了错误,但实际上可能无法解决您的问题,具体取决于问题是什么。这可能是一个格式不正确的查询,但如果没有数据库模型和过滤逻辑,我们无法诊断它。

© www.soinside.com 2019 - 2024. All rights reserved.