我有一个不同的基本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());
答案 0 :(得分:3)
删除BEGIN
和END
令牌。
此令牌可以存储在存储过程触发器或事件中。
BEGIN ... END语法用于编写复合语句,其中 可以出现在存储的程序中(存储过程和函数, 触发器和事件)。复合语句可以包含多个 语句,由BEGIN和END关键字括起来。 STATEMENT_LIST 表示一个或多个语句的列表,每个语句以a结尾 分号(;)语句分隔符。 statement_list本身是 可选,因此空的复合语句(BEGIN END)是合法的。
答案 1 :(得分:1)
为什么不使用值的哈希和一个古老的ActiveRecord类来做到这一点? ActiveRecord的重点是保护您免受SQL攻击。