-
Notifications
You must be signed in to change notification settings - Fork 13
Description
When using csvsql to insert csv files to MySQL database, the REPLACE prefix generates incorrect SQL and fails with error.
csvsql --version
csvsql 1.0.5
python3 --version
Python 3.7.3
python --version
Python 2.7.16
Tested on Debian WSL.
Test file attached but can be anything.
test.txt
Commands tried:
csvsql --db mysql+mysqlconnector://$dbUser:$dbPass@$dbString:$dbPort/$dbSchema --tables test --unique-constraint Id --create-if-not-exist --prefix REPLACE --insert test.csv
csvsql --db mysql+mysqlconnector://$dbUser:$dbPass@$dbString:$dbPort/$dbSchema --tables test --unique-constraint Id --create-if-not-exist --prefix IGNORE --insert test.csv
When using IGNORE prefix the command finishes without any error, but with REPLACE it throws an ProgrammingError:
ProgrammingError: (mysql.connector.errors.ProgrammingError) 1064 (42000): 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 'REPLACE INTO test (
Name,Id,Width) VALUES ('Charles', '1', '1')' at line 1
[SQL: INSERT REPLACE INTO test (Name,Id,Width) VALUES (%(Name)s, %(Id)s, %(Width)s)]
As you can see on the bottom line, I have tried to highlight the error. It should have been only "REPLACE INTO"
MySQL Documentation states that the correct syntax for REPLACE INTO does not have INSERT in front.
https://dev.mysql.com/doc/refman/8.0/en/replace.html
As the syntax for IGNORE actually is "INSERT IGNORE INTO", this prefix does not throw an error.