SQLite3在创建表时使用变量?

时间:2011-05-09 23:35:31

标签: ruby sqlite

我希望在使用Ruby和SQLite3创建表时将表名作为变量传递。

这是我到目前为止所做的:

$db.execute %q{
  CREATE TABLE @tableName (
  id integer primary key,
  term varchar(100),
  meaning varchar(100))
}

$ db定义为

$db = SQLite3::Database.new("test.db")
$db.results_as_hash = true

@tableName是用户输入。我可以看到它不喜欢@tableName,但我不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

%q是单引号替代,插值在单引号字符串中不起作用。 同样在ruby插值中使用#{}进行,就像在"Welcome #{name}"中一样。 我会尝试:

$db.execute <<-SQL
  CREATE TABLE #{@tableName} (
    id integer primary key,
    term varchar(100),
    meaning varchar(100)
  )
SQL

答案 1 :(得分:1)

只需使用普通字符串插值:

$db.execute %Q{
  CREATE TABLE #{@tableName} (
  id integer primary key,
  term varchar(100),
  meaning varchar(100))
}

请注意,我已将%q{}引号切换为%Q{}以使插值生效。