使用气流时插入查询中的语法错误MySqlOperator

时间:2018-05-19 09:13:41

标签: python mysql airflow

我正在使用.csvMySqlOperator文件加载到 mysql 表(test1有2个int列)中,但在插入查询时出现语法错误,下面是我的代码试图

    for filename in os.listdir(path):
            if str(filename).endswith('.csv'):
                     csv_data = csv.reader(file(filename))
                     for row in csv_data:
                            sql1=("""insert into test1 values (%s,%s)""",row)
                            mysql_op = MySqlOperator(task_id='testop',
                                       sql=sql1,
                                       mysql_conn_id='hack5_id', owner='hack5',dag=dag)
                            mysql_op.run(start_date=datetime.now(), end_date=datetime(2018, 5, 21))

ERROR:

_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL 
syntax; check the manual that corresponds to your MySQL server version for 
the right syntax to use near '%s,%s)' at line 1")

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

尝试运行以下内容:

    for filename in os.listdir(path):
        if str(filename).endswith('.csv'):
                 csv_data = csv.reader(file(filename))
                 for row in csv_data:
                        sql1="insert into test1 values ({})".format(",".join(row))
                        mysql_op = MySqlOperator(task_id='testop',
                                   sql=sql1,
                                   mysql_conn_id='hack5_id', owner='hack5',dag=dag)
                        mysql_op.run(start_date=datetime.now(), end_date=datetime(2018, 5, 21))

答案 1 :(得分:0)

谢谢,@ kaxil,我上面试过,你的代码和我的代码都给出了同样的错误, 实际上它正在构建的查询就像

insert into test1 values (['7', '8']),

按原样填充列表,我们可以看到错误的插入语法。 所以我修改了下面的插入语句

sql1="insert into test1 values ({})".format(",".join(row))

将查询构建为

insert into test1 values (7, 8)

并无误插入。

相关问题