【问题标题】:Specifying the database name with SQLite3 when using self.table_name使用 self.table_name 时使用 SQLite3 指定数据库名称
【发布时间】:2013-11-14 19:23:15
【问题描述】:

我有一个跨多个数据库的 has_many,例如:

class Foo
  establish_connection :database1
  has_many :bars
end

class Bar
end

一般情况下是没问题的。Foo使用database1,Bar使用Rails环境数据库(根据database.yml)。不幸的是,关联被破坏了:

Table 'database1.bars' doesn't exist

我在网上阅读了几个地方,我需要专门用self.table_name= 指定数据库名称。 SQLite3 似乎没有数据库名称?我想做

self.table_name = '<something>.bars'

在我的酒吧模型中。 SQLite3 可以做到这一点吗?

【问题讨论】:

  • 那么,您有机会尝试我的建议吗?成功了吗?

标签: ruby-on-rails sqlite activerecord


【解决方案1】:

默认情况下,SQLite 创建一个名为main 的数据库,附加到.db 文件。所以可以尝试参考main数据库如下:

self.table_name = 'main.bars'

更多信息见ATTACH DATABASE官方文档第二段。

注意:不确定它是否适用于 Ruby 我刚刚在 sqlite 上直接尝试如下:

D:\sqlite3>sqlite3 test.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE User(user_id INTEGER PRIMARY KEY,name VARCHAR);
sqlite> INSERT INTO User(name) VALUES('dic19');
sqlite> INSERT INTO User(name) VALUES('Logan Serman');
sqlite> SELECT * FROM User;
1|dic19
2|Logan Serman
sqlite> .databases
seq  name             file
---  ---------------  ----------------------------------------------------------
0    main             D:\sqlite3\test.db
sqlite> SELECT * FROM main.User;
1|dic19
2|Logan Serman
sqlite>

使用.databases 命令,您可以获得所有附加数据库的名称和文件的列表:

.databases             List names and files of attached databases

截图

【讨论】:

    猜你喜欢
    • 2021-06-12
    • 2021-04-08
    • 2018-01-10
    • 2018-07-30
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多