Я загружаю .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")
Пожалуйста помоги мне с этим.
Попробуйте запустить следующее:
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))
Спасибо, @kaxil, я пробовал выше, и ваш код, и мой дают ту же ошибку, на самом деле запрос, который он строил, был похож
insert into test1 values (['7', '8']),
заполняющий список как есть, который мы можем видеть неправильный синтаксис вставки. поэтому я изменил инструкцию insert, как показано ниже.
sql1="insert into test1 values ({})".format(",".join(row))
который строит запрос как
insert into test1 values (7, 8)
и вставка без ошибок.