![](/img/trans.png)
[英]How can I pad and/or truncate a vector to a specified length using numpy?
[英]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.