rake db:seed失败并显示错误消息Mysql2 ::错误:您的SQL语法中有错误

时间:2016-02-28 20:17:44

标签: mysql ruby-on-rails

我有一个不同的基本db / seeds.rb,一行,获取一个sql文件:

ActiveRecord::Base.connection.execute(IO.read("db/load.sql"))

load.sql文件的内容是:

BEGIN;
INSERT INTO cities (id, name, created_at, updated_at) VALUES
(1, 'Goleta', now(), now()),
(2, 'Santa Barbara', now(), now()),
(3, 'Montecito', now(), now()),
(4, 'Summerland', now(), now()),
(5, 'Carpinteria', now(), now()),
(6, 'La Conchita', now(), now());
END;

运行命令时

rake db:seed 

我收到此错误:

Mysql2::Error: 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 'INSERT INTO cities (id, name, created_at, updated_at) VALUES
(1, 'Goleta', now()' at line 3

我能够在没有任何错误的情况下从mysql控制台执行相同的insert语句。 我在这里做错了什么?

以下是load.sql文件的新版本,其中只包含2个语句,并且在第一个语句之后失败,并且在本文开头报告的语法错误相同:

delete from stores_tacos;
INSERT INTO cities (id, name, created_at, updated_at) VALUES
(1, 'Goleta', now(), now()),
(2, 'Santa Barbara', now(), now()),
(3, 'Montecito', now(), now()),
(4, 'Summerland', now(), now()),
(5, 'Carpinteria', now(), now()),
(6, 'La Conchita', now(), now());

2 个答案:

答案 0 :(得分:3)

删除BEGINEND令牌。

此令牌可以存储在存储过程触发器或事件中。

  

BEGIN ... END语法用于编写复合语句,其中   可以出现在存储的程序中(存储过程和函数,   触发器和事件)。复合语句可以包含多个   语句,由BEGIN和END关键字括起来。 STATEMENT_LIST   表示一个或多个语句的列表,每个语句以a结尾   分号(;)语句分隔符。 statement_list本身是   可选,因此空的复合语句(BEGIN END)是合法的。

来源: http://dev.mysql.com/doc/refman/5.7/en/begin-end.html

答案 1 :(得分:1)

为什么不使用值的哈希和一个古老的ActiveRecord类来做到这一点? ActiveRecord的重点是保护您免受SQL攻击。