如何用SQLAlchemy高效为已有SQL表新增列并追加数据?
高效追加带新列的数据到SQL Server临时表方案
问题背景
我已通过SQLAlchemy建立SQL Server连接并创建了临时表,代码如下:
database_con = f'mssql://@{server}/{database}?driver={driver}' engine = create_engine(database_con) con = engine.connect() tbl = '#temp' df = pd.DataFrame({'col1':[1,2,3], 'col2':['a','b','c']}) df.to_sql( name=tbl, con=con, if_exists="append", index=False )
现在我有包含新列的新数据需要追加到这个现有临时表中。之前查阅2011年的StackOverflow资料,当时认为无法通过SQLAlchemy为表新增列。
当前低效解决方案
我目前的做法是用pd.concat将新DataFrame与现有数据合并,删除SQL中的原有表后再写入合并后的表,代码如下:
df = pd.DataFrame({'column1':['test_20230925'], 'column2':[234], 'column3':[234.56]}) df_new = pd.concat([data,df]) drop_query = f""" drop table {tbl}""" con.execute(text(drop_query)) con.commit() df_new.to_sql( name=tbl, con=con, if_exists="append", index=False )
这个方案仅适用于小数据量,但我的部分表有1000万行数据,这种读入内存、删表、合并再写入的方式效率极低。
ALTER TABLE尝试失败
我还尝试直接执行ALTER TABLE语句新增列:
alter_query = f""" alter table {tbl} add column New_Col varchar(255)""" con.execute(text(alter_query)) con.commit()
但出现如下错误:
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near the keyword 'column'. (156) (SQLExecDirectW)") [SQL: alter table #temp add column New_Col varchar(255)]
求助
请问是否有更高效的解决方案?
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

