to_sql добавить столбец, если не существует (sqlalchemy mysql) - PullRequest
2 голосов
/ 29 сентября 2019

при добавлении строк в таблицу mysql с пандами to_sql подобно

df.to_sql('table_name', engine, if_exists='append')

в добавляемом df может содержаться новый столбец, которого нет в mysql table_name,

Итак, я получаю pymysql.err.InternalError:

InternalError: (pymysql.err.InternalError) (1054, "Unknown column 'new_columns' in 'field list'")

При попытке перехватить это исключение для добавления 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

Это решение некрасиво и нестабильно, поэтому я буду признателен за ваш совет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...