gpt4 book ai didi

python-3.x - SQLAlchemy scoped_session 没有从数据库获取最新数据

转载 作者:行者123 更新时间:2023-11-29 13:46:12 27 4
gpt4 key购买 nike

我对整个 ORM 主题相当陌生,而且我已经搜索过论坛和文档。问题是关于使用 SQLAlchemy 作为 PostgreSQL 的 ORM 的 flask 应用程序。

__init__.py 包含以下行:

db = SQLAlchemy()

创建的对象在其他文件中被引用以访问数据库。

模型有保存功能:

def save(self):
db.session.add(self)
db.session.commit()

还有一个更新函数:

def update(self):
for var_name in self.__dict__.keys():
if var_name is not ('_sa_instance_state' or 'id' or 'foreign_id'):
# Workaround for JSON update problem
flag_modified(self, var_name)
db.session.merge(self)
db.session.commit()

当我试图保存一个新对象时出现问题。保存函数将其写入数据库,直接查询数据库(psql 等)时可见,但以下 ORM 查询如下:

model_list = db.session.query(MyModel).filter(MyModel.foreign_id == this_id).all()

给出空响应。

更新函数的调用确实按预期工作,使用 ORM 请求时新数据可见。

我总是使用相同的 session 对象,例如: <sqlalchemy.orm.scoping.scoped_session object at 0x7f0cff68fda0>

如果应用程序重新启动,一切正常,直到创建新对象并尝试使用 ORM。

一个不方便的解决方法是使用原始 SQL,例如:

model_list = db.session.execute('SELECT * FROM models_table WHERE
foreign_id = ' + str(this_id))

它给出了一个带有最新数据的 ResultProxy,如下所示:

<sqlalchemy.engine.result.ResultProxy object at 0x7f0cf74d0390>

我认为我的问题是对 session 的误解。谁能帮帮我?

最佳答案

发现问题与session无关,与filter()方法有关:

# 字符串输入到 filter() 函数中的必要导入
从 sqlalchemy 导入文本
# 解决方案或解决方法
model_list = db.session.query(MyModel).filter(text('foreign_key = ' + str(this_id))).all()

我无法找出问题所在:filter(MyModel.foreign_id == this_id) 但这是另一个问题。

我认为这种方式比执行原始 SQL 更好。

关于python-3.x - SQLAlchemy scoped_session 没有从数据库获取最新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48128705/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com