【问题标题】:Getting "syntax error, unexpected tIDENTIFIER..." when trying to insert rows into SQLite via Ruby尝试通过 Ruby 将行插入 SQLite 时出现“语法错误,意外的 tIDENTIFIER ...”
【发布时间】:2013-10-07 04:28:37
【问题描述】:

有人有什么想法吗?我在 bash 中收到此错误消息...

insert_code_sam.rb:31: syntax error, unexpected tIDENTIFIER, expecting ')'
    "INSERT INTO index1 (name) VALUES ("test1");"
                                             ^
insert_code_sam.rb:32: syntax error, unexpected ')', expecting end-of-input

在单个文件 insert_code_sam.rb 中,我正在尝试创建一个新数据库、创建两个表并插入一个测试行。 SQlite 表的创建没有问题,但我似乎无法插入行。

require "sqlite3"

db = SQLite3::Database.new( "new_database.db" )

db.execute( 
  "CREATE TABLE index1 (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name TEXT,
    tagline TEXT,
    blurb TEXT,
    photo_url TEXT);"
) 

db.execute( 
  "CREATE TABLE student_profile (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    name_id INTEGER,
    thumbnail_url TEXT,
    background_url TEXT,
    quote TEXT,
    bio TEXT,
    education TEXT,
    work TEXT,
    github TEXT,
    treehouse TEXT,
    codeschool TEXT,
    coderwall TEXT);"
) 

  db.execute(
    "INSERT INTO index1 (name) VALUES ("test1");"
  )

【问题讨论】:

    标签: sql ruby sqlite


    【解决方案1】:
    db.execute(
        "INSERT INTO index1 (name) VALUES ('test1');"
      )
    

    【讨论】:

      【解决方案2】:

      如果您想使用"" 分隔符的替代方式:

      db.execute(
          "INSERT INTO index1 (name) VALUES (\"test1\");"
        )
      

      【讨论】:

      • 你是说这通常比简单地将双引号更改为单引号更好吗?
      • 在 Ruby 中,以''' 分隔的字符串存在很大差异。所以如果你使用",那么你需要使用`\`来转义它。
      【解决方案3】:

      您过早地结束了字符串——您的代码不是有效的 Ruby 语法。 SQLite expects single quoted strings, anyway。解决方案是为VALUES 使用单引号:

      db.execute(
        "INSERT INTO index1 (name) VALUES ('test1');"
      )
      

      【讨论】:

      • 谢谢。与 Arup 的答案相同,但我会接受您的答案,因为您已经提供了解释(供未来用户使用)。
      猜你喜欢
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多