Sqlite SQLAlchemy数据在连接之间不一致

Sqlite SQLAlchemy数据在连接之间不一致,sqlite,sqlalchemy,python-asyncio,isolation-level,flask-restful,Sqlite,Sqlalchemy,Python Asyncio,Isolation Level,Flask Restful,我有两个python应用程序(单独的进程),它们都用来访问sqlite数据库。其中一个是使用模块设置的(但仍然是Flask应用程序),另一个是API 我发现了一个问题,异步IO应用程序看不到由Flask RESTful API写入数据库的数据。我已经读到这可能是由于隔离级别()。如果我使用,问题就会消失 那么这真的是因为隔离级别吗?我的理解是,sqlite几乎一直在使用(我相信我的情况就是这样)。正在编写的REST API正在提交其事务,但除非调用session.expire\u all(),否

我有两个python应用程序(单独的进程),它们都用来访问sqlite数据库。其中一个是使用模块设置的(但仍然是Flask应用程序),另一个是API

我发现了一个问题,异步IO应用程序看不到由Flask RESTful API写入数据库的数据。我已经读到这可能是由于隔离级别()。如果我使用,问题就会消失

那么这真的是因为隔离级别吗?我的理解是,sqlite几乎一直在使用(我相信我的情况就是这样)。正在编写的REST API正在提交其事务,但除非调用
session.expire\u all()
,否则异步IO代码不会看到它们。这看起来像是事务隔离问题,更像是SQLAlchemy问题,但我不是100%确定

在查询数据库之前,我是否必须始终记住调用
会话。使\u all()过期(
?有没有更好的方法来保持应用程序之间的一致性

下面是一些代码,如果有帮助的话:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)    
db = SQLAlchemy(app)

@asyncio.coroutine
def grab_data_off_queue(self):
    while True:
        try:
            hit = self.hit_queue.get(False)

            # required for this session to see the changes made by REST api
            db.session.expire_all()

            rows = MyTable.query.filter_by.all()

            for row in rows:
                # the REST API is setting field_2 to 123,
                # but this session cannot see those changes
                if row.field_2 == 123:
                     do_something() #execution never gets here
以下是REST API:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)    
db = SQLAlchemy(app)

class MyApi(Resource):
    def put(self, id):
         row = MyTable.query.filter_by(table_id=id).one()
         row.field_2 = 123
         db.session.commit()
         return '', 204

默认情况下,
SQLAlchemy
在处理程序退出之前不会提交更改,您需要显式调用
session.commit()


但是,使用异步协同程序中的同步
SQLAlchemy
代码,即使在相对适中的负载下,也会有效地降低性能。

REST api代码正在调用
session.commit()
。你是说即使是异步代码,也需要调用
session.commit()?