同时将行附加到 mysql 表与熊猫to_sql
一样
df.to_sql('table_name', engine, if_exists='append')
Run Code Online (Sandbox Code Playgroud)
附加df
可能包含一些新列,在 mysql 中不存在table_name
,
所以,我被 pymysql.err.InternalError 触发了:
InternalError: (pymysql.err.InternalError) (1054, "Unknown column 'new_columns' in 'field list'")
Run Code Online (Sandbox Code Playgroud)
在尝试捕获此异常以添加new column
到 mysql 表时,pymysql.err.InternalError
由于某种原因我无法捕获异常,因此我尝试以一种奇怪的方式执行BaseException
以下操作:
while True:
try:
df.to_sql(table_name, engine, if_exists='append')
except BaseException as e:
b = e.args
missing_column = b[0].split('(pymysql.err.InternalError) (1054, "Unknown column \'')[1].split(' in \'field list\'")')[0].replace("'",'')
with sql.engine.connect() as con:
con.execute(f'ALTER TABLE {table_name} ADD COLUMN {missing_column} TEXT;')
else: break
Run Code Online (Sandbox Code Playgroud)
这个解决方案既丑陋又不稳定,所以我很感激你的建议!
您可以在向其追加新数据之前检查 sql 表列:
import pandas as pd
target_name = "your_table"
target_cols = pd.read_sql_query(f"select * from {target_name} limit 1;").columns.tolist()
your_cols = df.columns.tolist()
if set(your_cols) - set(target_cols) == set():
# APPEND OPERATION...
else:
# NEW COL OPERATION...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
601 次 |
最近记录: |