簡體   English   中英

如何使用 Pandas 截斷表格?

[英]How can I truncate a table using pandas?

我有一個執行幾次的函數,每次它使用以下代碼將元素附加到 SQL Server 上的表中:

import pandas as pd
import pandas.io.sql as pdsql
import pyodbc

params = [(self.key[int(el[0])], bid, label, tr_date, el[1]) for el in elements]
df = pd.DataFrame(params, columns=['ID', 'BID', 'Label', 'tr_date', 'Score'])
engine = sqlalchemy.create_engine('mssql+pyodbc://MY-SERVER/Test')
df.to_sql(out_tbl, engine, if_exists='append', index=False)

但是,在輸入上述代碼之前,我想截斷(甚至刪除)該表。 我在 pandas.io.sql 中沒有找到任何專用函數。 所以我試圖創建一個空的數據框只是為了調用:

df1 = pd.DataFrame()
df1.to_sql(out_tbl, engine, if_exists='replace', index=False)

此代碼確實刪除了表,但隨后在 sqlalchemy 嘗試重新創建空表時生成異常。 我可以捕獲並忽略它,下次使用 if_exists='append' 調用 to_sql() 將正確創建表,但這非常難看。

我嘗試的另一種方法是清除原始數據框中的所有行,留下列:

df1 = df.drop(df.index)
df1.to_sql(out_tbl, engine, if_exists='replace', index=False)

這幾乎有效:它會截斷表,然后插入一條所有字段都為 NULL 的記錄......

目前我的解決方法是為這個任務保留另一個 pyodbc 連接:

sql = "DELETE FROM " + out_tbl
try:
    cursor.execute(sql)
except:                     # mainly if table doesn't exist
    pass

那么有沒有一種簡單的方法可以用 Pandas 來完成這個簡單的任務呢?

謝謝阿迪

試試這個...我在我的項目中遇到了同樣的問題,所以只需連接到 db 並執行 truncate 命令

params = [(self.key[int(el[0])], bid, label, tr_date, el[1]) for el in elements]
df = pd.DataFrame(params, columns=['ID', 'BID', 'Label', 'tr_date', 'Score'])
engine = sqlalchemy.create_engine('mssql+pyodbc://MY-SERVER/Test')
conn = engine.connect()
conn.execute("TRUNCATE TABLE out_tbl")
df.to_sql(out_tbl, engine, if_exists='append', index=False)

暫無
暫無

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

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