【问题标题】:constantly reading data from database using pyodbc使用 pyodbc 不断地从数据库中读取数据
【发布时间】:2020-09-01 13:39:46
【问题描述】:

我有一个不断更新的数据库(5s 间隔值),我的目的是读取数据库中已更新的新数据,下面是我的初稿代码。但是,我设法阅读它,直到代码执行时的最后一行,然后它停止。我需要代码不断运行,以便获取新的数据条目(我们的数据库每 5 秒更新一次)。

import csv
import pyodbc

server = '*****' 
database = '******' 
username = '******' 
password = '*****' 
cnxn = pyodbc.connect('DRIVER={SQL SERVER};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("select * from marketc")

row = cursor.fetchone()
while row is not None:
    row = cursor.fetchone()
    print (row)

*这可能很难理解,但重点是我只想读取我们数据库中的最后一行,其中数据库每 5 秒不断更新一次。

【问题讨论】:

  • 您需要做的第一件事是定义“最后一行”是什么。您的 SELECT 语句没有 ORDER BY 子句,因此不能保证结果按任何特定顺序排列。

标签: python sql sql-server pyodbc


【解决方案1】:

设法对其进行编码。我只是导入时间包然后循环它并每 6 秒再次检查一次数据库,因为我知道每 5 秒将在数据库中更新一个新值。

import csv
import pyodbc
import time

server = '*****' 
database = '******' 
username = '******' 
password = '*****' 
cnxn = pyodbc.connect('DRIVER={SQL SERVER};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
cursor.execute("select * from marketc")

while True:
    row = cursor.fetchone()
    while row is not None:
        row = cursor.fetchone()
        print (row)
        time.sleep(6)

【讨论】:

  • 不——最终你会发现表中的行没有特定的顺序。根据您当前的环境,您可能会有不同的想法 - 这可能负载非常轻,几乎没有资源争用。而且您的代码在逐个获取行之间仅休眠 6 秒 - 因此期望它获取/显示“最后”行没有什么意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多