我有一个问题需要将后端连接从SQLite更改为SQL Server。在为sql_alchemy_conn
输入正确的连接字符串后,我运行以下命令:airflow initdb
。我收到以下错误:
sqlalchemy.exc.ProgrammingError:(pyodbc.ProgrammingError)('42000',“ [42000] [Microsoft] [SQL Server的ODBC驱动程序13] [SQL Server]一个表只能有一个时间戳列。因为表' task_reschedule'已经有一个,不能添加列'start_date'。(2738)(SQLExecDirectW)“)[SQL:'\ n创建表task_reschedule(\ n \ tid INTEGER NOT NULL IDENTITY(1,1),\ n \ ttask_id VARCHAR(250)NOT NULL,\ n \ tdag_id VARCHAR(250)NOT NULL,\ n \ texecution_date TIMESTAMP NOT NULL,\ n \ ttry_number INTEGER NOT NULL,\ n \ tstart_date TIMESTAMP NOT NULL,\ n \ tend_date TIMESTAMP NOT NULL, \ n \ tduration INTEGER NOT NULL,\ n \ treschedule_date TIMESTAMP NOT NULL,\ n \ tPRIMARY KEY(id),\ n \ tCONSTRAINT task_reschedule_dag_task_date_fkey FOREIGN KEY(task_id,dag_id,execute_date)REFERENCES task_instance(task_instance) )\ n \ n'](此错误的背景位于:http://sqlalche.me/e/f405)
答案 0 :(得分:1)
所以这对我有用:
在文件0a2a5b66e19d_add_task_reschedule_table.py
中添加:
def mysql_datetime():
return mysql.DATETIME(timezone=True)
并替换所有带有timestamp()
的行,如下所示:
sa.Column('execution_date', timestamp(), nullable=False, server_default=None),
与此:
sa.Column('execution_date', mysql_datetime(), nullable=False, server_default=None),
进行此更改后,以上错误消失了,但是我不确定是否还有其他意外后果。如果是这样,我将在这里进行更新,或者只是使用MySQL数据库。