簡體   English   中英

python中從sql中提取數據(每秒一次)

[英]Extract data from sql in python (one time per second)

如何從 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)

如果我沒理解錯的話,您只想查看記錄(自上次查詢以來添加的記錄)。 您需要在應用程序中添加一些邏輯。

您的表可能已經有一個自動遞增的 ID(或者某種時間戳也可以)。 每次查詢后,您需要記住您獲得的最大值,並且后續查詢應包含一個WHERE子句(即WHERE ID > nnnnn ),以便您只會獲得 ID大於上一次查詢的最大值的記錄。

或者,您可以使用日期時間值,但這可能不太准確(除非您不介意某些重疊)。

此查詢僅返回所有內容。

PS:我不知道為什么你的異常處理塊中有一個提交。 你在這里沒有做任何交易,你也沒有向數據庫寫入任何數據。 不使用變量a

如果編輯表架構不是一個選項,則可以通過以下行接近您想要的內容......

  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())"""): 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM