python - 线程上的 SQLAlchemy scoped_session 更新不会提交
问题描述
我在这里完全是 SQLAlchemy 的菜鸟,但是我在从线程 scoped_session 更新对象时遇到问题。我计划运行几个线程,所有这些线程都将更新数据库中的不同行,每个都有自己的 scoped_session。但我似乎无法让作用域会话提交并实际更新 .db 文件。
以下是重现我的问题的最小代码:
from sqlalchemy import *
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
from threading import Thread
session_factory = sessionmaker(bind=engine)
Session = scoped_session(session_factory)
session1 = Session()
Base = declarative_base()
class Order(Base):
__tablename__ = "orders"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String)
def __init__(self, iterable=(), **kwargs):
self.__dict__.update(iterable, **kwargs)
Base.metadata.create_all(engine)
session1.add(Order({'name':'bill'}))
session1.commit()
orders = session1.query(Order).all()
print(orders[0].name)
def funct():
session2 = Session()
orders[0].name = "ted"
session2.commit()
Session.remove()
print(orders[0].name)
t1 = Thread(target=funct)
t1.start()
此(如预期)的输出是:
bill
ted
[Finished in 0.3s]
但是在运行这个之后,.db 文件仍然只有一行带有“bill”......我不明白为什么它没有被更新为“ted”......我花了一些时间阅读 SQLAlchemy 文档多次,但就像我提到的,我是一个完全的菜鸟,而且很多都在我的脑海中。
任何帮助将不胜感激。
-布兰登
解决方案
推荐阅读
- python-3.x - python3日期时间问题
- node.js - Braintree.Transaction.Status 在braintree-node 中不存在
- python - 每次我运行我的程序时,都会出现意外的冻结 matplotlib 图形窗口
- python - 道路设计特征的对象识别
- android - StartLockTask 因硬件按钮而失败
- php - 如何一次编写多个foreach语句
- c++ - 如何将向量中的每个元素增加指定值?
- node.js - 使用 HTTP 代理时通过 Chrome 与 Node.js 的 HTTP 请求的差异
- c# - 如何在 C# Web API 同步和异步中获取 Windows Authenticated 用户
- c++ - connect4 malloc 错误的复制构造函数