【问题标题】:Python refresh sqlite3 connection to retrieve latest valuesPython刷新sqlite3连接以检索最新值
【发布时间】:2018-08-24 11:03:51
【问题描述】:

我有一个 Djanjo 应用程序,它允许用户输入提交到数据库的数据。

通过在同一台机器上运行的 python 脚本立即访问此数据库。

场景

  1. 用户从 Raspberry Pi (RPi) 登录 Django 网站
  2. 用户输入所需数据。
  3. 数据提交到数据库。
  4. 用户按下连接到 RPi 的按钮,提示数据库查询。
  5. 单独的 python 脚本根据用户输入执行计算。

我的问题是,如果在第3步之后立即执行第4步,查询并没有得到用户输入的最新数据,而是数据库中已经存储了之前的数据。

如果用户在 30 秒后按下按钮,则查询将成功执行。

我从数据库中获取最新数据的代码:

        conn = sqlite3.connect('Line3_Data.db')
        c = conn.cursor()
        c.execute("SELECT tact FROM LineOEE03 ORDER BY tact desc limit 1")
        current_tact = c.fetchone()


       tact   
----------------- 
        45        <- old value retrieved     
        60        <- new value from step 3 not retrieved   
        60        <- new value from step 3 not retrieved     

有没有办法刷新连接以确保只检索最新的值?

编辑

写入数据库的速度非常快。刷新sqlitebrowser 时立即可见。刷新sqlitebrowser 后,检查写入是否发生,旧值仍被检索。

读取新值需要大约 30 秒。

【问题讨论】:

  • 我会看write而不是read。你提交了写吗?
  • 将编辑问题以澄清。我可以使用sqlitebrowser 立即看到写入。它会立即记录下来。

标签: python django database sqlite


【解决方案1】:

在读取之前执行conn.commit() 应该使您的连接会话保持最新。然后你会看到数据的最后状态。

【讨论】:

  • 谢谢!忽略了这么重要的事情!
  • 阅读时很容易忘记...如果符合您的需要,您还可以打开连接设置 autocommit = True。祝你好运
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多