Синтаксическая ошибка в запросе вставки при использовании воздушного потока MySqlOperator

0

Я загружаю .csv файл в таблицу mysql (test1 имеет 2 столбца int), используя MySqlOperator, но получая синтаксическую ошибку при вставке запроса, ниже код, который я пытаюсь

    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))

ОШИБКА:

_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")

Пожалуйста помоги мне с этим.

Теги:
airflow

2 ответа

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))
0

Спасибо, @kaxil, я пробовал выше, и ваш код, и мой дают ту же ошибку, на самом деле запрос, который он строил, был похож

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

заполняющий список как есть, который мы можем видеть неправильный синтаксис вставки. поэтому я изменил инструкцию insert, как показано ниже.

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

который строит запрос как

insert into test1 values (7, 8)

и вставка без ошибок.

  • 0
    Рад, что это помогло в какой-то момент. Спасибо, я обновил свой ответ, чтобы отразить это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню