Sql-Server

如何在第一個位置向 sql server 表添加新行(來自 python)

  • August 2, 2021

我在數據庫中有一個 sql 表Tab 1。它根據日期以下降方式排序。該表必須使用來自 python 的新記錄進行更新。在 python 中,我有另一個表Tab 2類似於這個表(相同的列名),但新數據也再次以下降方式排序。我需要將Tab 2中的記錄複製/插入到Tab 1中。特別是只有那些新的記錄(它發生在選項卡 1 中已經存在選項卡 2中的記錄中,並且不必再次複製/插入)

詳細地說,一旦這兩個表可用,程式碼就會打開 sql server 並循環遍歷Tab 2的行,它會檢查該記錄是否是新記錄。如果是,則插入查詢應該將新記錄放在 Tab 1 的第一個位置。因此 Tab 1 的最終版本仍然以下降方式排序(新記錄應該在Tab 1的開頭) . 但是,這並沒有發生,新記錄添加在Tab 1的中間的中間或其他位置。

我也嘗試使用 INSERT TOP(1) 來強制執行此行為,但不起作用。

對於專家(我不是)來說,在現有 SQL 表的第一個位置插入新行應該是一件容易的事,但我被卡住了。程式碼下方:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
df = pd.read_sql_query('SELECT * FROM dbo.Twitter',cnxn) #--> df is *Tab 1*, it is in sql server

for index, row in df5.iterrows(): #-->df5 is the python table, its records have to be inserted
   if str(row.id) not in df.id.values: #--> if they are new
       cursor.execute("INSERT INTO Twitter (id, Date_Time,Author,Tweet,Link, Source, Is_retwitted, Sentiment) values(?,?,?,?,?,?,?,?)", row.id, row.created_at, row.author, row.full_text, row.entities,row.source, row.is_retwitted, row.Sentiment) #-->QUERY
cnxn.commit()
cursor.close()

提前謝謝了

沒有訂購桌子。表中沒有“第一行”、“下一行”等內容。

您可以在定義結果順序的 SELECT 語句中使用 ORDER BY。在沒有 ORDER BY 的情況下,DBMS 目前可以自由地以它想要的任何順序返回行。

因此,您嘗試實現的目標本身是不可能的。

您需要一些列,並讓該列的內容確定您定義為“訂單”的內容。即,當您從該表中選擇時,您可以在 ORDER BY 中使用的東西。

引用自:https://dba.stackexchange.com/questions/297471