【问题标题】:Extract data from sql in python (one time per second)从python中的sql中提取数据(每秒一次)
【发布时间】:2020-02-22 18:41:14
【问题描述】:

如何在 python 中从 sql 中提取数据? 我有这段代码,但它重复了所有不是我想要的值。 我希望在我的 python 中有新的更新的 sql 数据。我几乎被击中了几天......任何善良的灵魂请 我用的是sqlserver2012,python

import time
sql_conn = connectSQLServer('ODBC Driver 13 for SQL Server', 'DESKTOP-K6A10IO\SQLEXPRESS', 'display')

mycursor = sql_conn.cursor()

a = 0
while True:
    try:
        time.sleep(1)
        a=a+1
        print(a)
        sql = "SELECT * FROM dbo.LiveStatsFromSQLServer"    
        mycursor.execute(sql)

        myresult = mycursor.fetchall()

        for x in myresult:
            print(x)


    except Exception as error:
        print("Nothing in database\n")
        print(error)
sql_conn.commit()
The result shown is 
1
(1625, 3)
(1626, 0)
(1627, 10)
2
(1625, 3)
(1626, 0)
(1627, 10)
3
(1625, 3)
(1626, 0)
(1627, 10)
(1622, 20)
while i wish to have a constantly updating to the end of the list like:
(1625, 3)
(1626, 0)
(1627, 10)
after 1 second
(1622, 20)
after 1 second
(1612, 10)

【问题讨论】:

标签: python mysql sql flask plotly-dash


【解决方案1】:

如果我理解正确,您只想查看 记录(自上次查询后添加的记录)。您需要在应用程序中添加一些逻辑。

您的表可能已经有一个自动递增的 ID(或者某种时间戳可以做到)。每次查询后,你需要记住你得到的最大值,随后的查询应该包含一个WHERE 子句(即WHERE ID > nnnnn),这样你就只能得到ID 大于的记录您之前查询的最大值。

您也可以使用日期时间值,但这可能不太准确(除非您不介意某些重叠)。

这个查询只返回所有内容。

PS:我不知道您为什么在异常处理块中有提交。您在这里没有进行任何事务,也没有将任何数据写入数据库。未使用变量a

【讨论】:

  • 您好,是的,我只想查看新记录。是的,我的表确实有自动递增的 id。你有子查询的例子吗?
  • @uiu808 这里有关于如何将参数从pythonstackoverflow.com/questions/902408/…传递给SQL的说明@
【解决方案2】:

如果编辑表架构不是一个选项,则可以通过以下行接近您想要的...

  for row in cursor.execute("""SELECT num,id ,row_number() partition by (select 1) FROM dbo.LiveStatsFromSQLServer"""): 

编辑

看到您可以更改架构,在您正在查询的表中添加一个编辑日期的列。

 for row in cursor.execute("""SELECT num,id FROM dbo.LiveStatsFromSQLServer where datetime> dateadd(s,-1,getdate())"""): 

【讨论】:

  • 感谢您的快速回复!好,我会试试!我已经被打了好几天了,天啊
  • 你有记录或者表是什么时候用SQL编辑过的吗?如果 SQL 表有一个 datetime 编辑列将使您的任务更容易
  • 我已经通过打印行尝试了这两个功能,但似乎无法检索数据
  • 您必须添加一个“日期时间”列才能使其正常工作。 row_number 可能语法不正确或在 mssql2012 中不受支持。我无法真正测试,这一切都在我的手机上
  • 是的,我确实添加了日期时间列作为日期时间来测试第二个代码。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2014-05-05
  • 2020-08-06
  • 2022-01-06
  • 2012-02-25
  • 2014-05-03
  • 2016-02-08
  • 2022-12-01
  • 1970-01-01
相关资源
最近更新 更多