flask-sqlalchemy 新增数据入库,然后马上查询,会有查询不到数据的情况?

2019-12-12 12:41:07 +08:00
 Raul7

先贴代码:

try:
  # 判断表中数据是否存在,存在更新,不存在新增
  if not existing:
      db.session.execute(
          ServiceAsset.__table__.insert(),
          [{'xxx': xxx}]
      )
  else:
      ServiceAsset.query.filter_by(host_id=xxx, port=xxx).update({'xxx':'xxx'})
  db.session.commit()
except Exception as e:
  db.session.rollback()

# ServiceAsset 表数据入库后,马上在 ServiceAsset 表进行一个查询获取 ServiceAsset 表的 id
try:
  service_asset_query = ServiceAsset.query.filter(and_(xx=xx, xxx=xxx)).all()
  if not service_asset_query:
      log.write('info', None, 0, u'在 ServiceAsset 中根据 xx 和 xxx 未获取到资产信息')
      pass
  for saq in service_asset_query:
      service_id_cur = saq.service_id
except Exception as e:
    db.session.rollback()

大概插入了几百条数据,其中会有几条获取不到 service_asset_query。

请问下各位表哥们,有遇到这种情况吗?该如何解决

4440 次点击
所在节点    Python
11 条回复
rogwan
2019-12-12 13:10:39 +08:00
如果读写并行,或者有主备的时候,可能出现这个情况,假如插入 100 条数据,在写 90 条的时候,来读取就会遗漏部分还在 session 里的数据。
Raul7
2019-12-12 13:43:17 +08:00
@rogwan 那要怎么解决啊 我这边应该是有主备
wangyzj
2019-12-12 14:08:04 +08:00
@Raul7 不是同一个节点?
lhx2008
2019-12-12 14:11:44 +08:00
一般就不管了,反正等会会插进去的。。要不你就强制主库查
Raul7
2019-12-12 14:46:24 +08:00
@lhx2008 我贴的代码后面的过程是要入库另一张表,有几条没查出结果,我另一张表的数据全乱了
simapple
2019-12-12 14:48:30 +08:00
session 的问题
Raul7
2019-12-12 14:58:19 +08:00
@wangyzj 有主从 写和更新操作都是直接主库 读是主从一起
wukangave
2019-12-12 14:59:35 +08:00
数据库经典的 read-after-write-consistency 问题。当写入后立即读取时,要保证从主节点读
wangyzj
2019-12-12 15:05:43 +08:00
@Raul7 有主从
这就是不是 sqlalchemy 的问题了
主从不是绝对实时啊
exip
2019-12-12 16:04:17 +08:00
这好像是事务应该解决的问题.
jwchen
2019-12-13 17:02:48 +08:00
主从要想想办法自己控制去哪里读,实时性高的当然要价格 is_salve 之类的参数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/628331

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX