标签: sequel

ruby的数据库抽象/适配器

您在Ruby中使用的数据库抽象/适配器是什么?我主要对数据导向的功能感兴趣,而不是那些具有对象映射的功能(如活动记录或数据映射器).

我目前正在使用续集.还有其他选择吗?

我最感兴趣的是:

  • 简单,干净,不含糊的API
  • 数据选择(显然),过滤和聚合
  • 没有字段映射的原始值选择:SELECT col1,col2,col3 => [val1,val2,val3]不是{:col1 => val1 ...}的散列
  • 能够传递要选择的列/值列表:select(array_of_columns)(not:dataset.select(:col1,:col2,:col3),它要求列已知)
  • API以一致(和工作)的方式考虑表模式'some_schema.some_table'; 也为此反思(从表中获取模式)
  • 数据库反射:获取表列的列表,它们的数据库存储类型以及可能的适配器抽象类型
  • 表创建,删除
  • 能够在循环中使用其他表(插入,更新)枚举来自另一个表的选择,而无需从枚举的表中获取所有记录

目的是在编写代码时操纵具有未知结构的数据,这与对象映射相反,其中结构或大多数结构通常是众所周知的.我不需要对象映射开销.

有哪些选项,包括对象映射库的后端?

ruby database-abstraction adapter sequel

3
推荐指数
1
解决办法
1015
查看次数

heroku db:push error uninitialized constant Sequel :: Postgres :: PGError

我在运行heroku db时遇到问题:pull和db:push命令.我的应用程序在bamboo-ree-1.8.7堆栈上运行Rails 3.我是Sequel的新手,我不确定脚本在抱怨什么.

$ heroku db:push
Loaded Taps v0.3.14
自动检测本地数据库:postgres://xxx@127.0.0.1/xxx_development?encoding = utf8
警告:应用程序'profreelas'中的数据将被覆盖且无法恢复.
无法连接到数据库:NameError - >未初始化的常量Sequel :: Postgres :: PGError

附加信息:
我的水龙头,续集和heroku宝石是最新的
我正在运行pg db adapter gem
在我的本地机器上运行postgresql

ruby postgresql ruby-on-rails heroku sequel

3
推荐指数
1
解决办法
1414
查看次数

如何使用续集递归保存模型?

我一直在玩Sequel和Sequel :: Model.

Group用很多Items(one_to_many)创建了一个.

我可以:

Group.new << Item.new
Run Code Online (Sandbox Code Playgroud)

但不是:

Group.new.add_item(Item.new)
Run Code Online (Sandbox Code Playgroud)

也不:

Item.new.group=Group.new. 
Run Code Online (Sandbox Code Playgroud)

它抱怨Group没有主键.

如果我保存group,它会被保存但项目不会被保存.

如何对所有内容进行递归保存?

ruby sequel

3
推荐指数
1
解决办法
489
查看次数

如何使用Ruby和Sequel将图像存储在数据库中?

我正在使用Ruby,或者更具体地说是使用Sequel ORMRamaze框架.所以请不要告诉我有关Paperclip宝石的信息,因为它只与ActiveRecord兼容.

考虑到这一点,我如何使用Ruby和Sequel将图像存储在数据库中?

ruby blob image ramaze sequel

3
推荐指数
1
解决办法
1002
查看次数

如何让postgresql与续集和jruby一起工作

require 'sequel'
require 'jdbc/postgres'
DB = Sequel.connect("jdbc:postgresql://user:pass@domain/database")
DB.tables
Run Code Online (Sandbox Code Playgroud)

返回:

....(bla bla bla stack trace bla bla bla)....
Sequel::DatabaseConnectionError: Java::OrgPostgresqlUtil::PSQLException: The connection attempt failed.
...........
Run Code Online (Sandbox Code Playgroud)

我也试过了

jdbc:postgresql://domain/database?user=name&pass=word 
Run Code Online (Sandbox Code Playgroud)

并且也有错误,但是另一个错误('密码请求但未提供')

红宝石1.9.3 - jruby 1.7.3

我看了看,试了很多代码样本,但是我无法让Sequel工作所以,在使用jruby时如何获得与postgres接口的续集?

postgresql jruby jdbc sequel

3
推荐指数
1
解决办法
2106
查看次数

不能在Ruby Sequel中'删除'

我从Ruby的Sequel数据库库开始.

给出以下代码:

require 'sequel'
db = Sequel.connect('sqlite://users.db')
users = db[:users]
users.first.delete
Run Code Online (Sandbox Code Playgroud)

Ruby抛出错误:

'delete' : wrong number of arguments (0 for 1) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)

我可以删除多条记录,但.first.delete不起作用.怎么了?

ruby sqlite sequel

3
推荐指数
1
解决办法
1442
查看次数

续集急切加载单个ORM对象的一些关联

我正在为一个小应用程序构建数据模型,并希望利用某些方法中的急切加载 - 即我事先知道某些关联将被使用的方法.

我已经阅读.eager方法的Sequel :: Model :: Association指南,但它让我有点困惑.一个典型的例子可能是:

Artist.eager( :albums => :tracks ).all
Run Code Online (Sandbox Code Playgroud)

它只使用三个查询加载所有Artist对象及其预加载的所有专辑字段,并预加载所有曲目.到现在为止还挺好.

但是说我想通过其主键加载一个艺术家,并且仍然预先加载了专辑+曲目(仍然有三个查询,可能比跟踪每个专辑的关联少很多)?我看不到任何这样的例子.一点点实验给了我

Artist.eager( :albums => :tracks ).where( :id => id ).all.first
Run Code Online (Sandbox Code Playgroud)

这似乎至少有效.我通过调用它确认了急切加载,然后关闭数据库,并显示我仍然可以访问关联.

但是,我觉得我错过了一些东西.构造,必须将主键传递给where子句,获得完整的数据集,然后要求第一项似乎很尴尬.我正在寻找这样的东西:

Artist.eager( :albums => :tracks )[ id ]
Run Code Online (Sandbox Code Playgroud)

...一种简单的方式来声明我想加载一个对象,并急切加载它的一些关联.

发现,我可以创建这样一个自定义的关联关系:

def eager_albums
  albums_dataset.eager( :tracks ).all
end
Run Code Online (Sandbox Code Playgroud)

但这很难使用,因为代码必须以不同的方式请求关联.

我的问题:我的构造是否Artist.eager( :albums => :tracks ).where( :id => id ).all.first按照我的想法在续集中做了,我可以做得更好(更简单的代码)吗?

ruby sequel

3
推荐指数
1
解决办法
1979
查看次数

如何在 Sequel 中的 where 语句中使用 json 字段?

我有一张桌子transactions

 id             | bigint                      | NOT NULL DEFAULT nextval('transactions_id_seq'::regclass)
 transaction_id | bigint                      | NOT NULL
 middleware_id  | text                        | 
 opname         | optype                      | NOT NULL
 created_at     | timestamp without time zone | NOT NULL
 finished_at    | timestamp without time zone |
 request        | jsonb                       | NOT NULL
 answer         | jsonb                       | 
Run Code Online (Sandbox Code Playgroud)

其中请求可以包含以下数据: { plugin_id: string, item_src_id: string, item_dst_id: string, payload: {}}{ plugin_id: string, item_id: string, payload: {}}

item_id我可以使用纯 SQL来选择事务列表:

SELECT id, request
  FROM transactions
  WHERE 'BEX456' …
Run Code Online (Sandbox Code Playgroud)

ruby postgresql sequel sequel-gem

3
推荐指数
1
解决办法
1407
查看次数

如何在AWS Lambda中正确加载gem扩展

我无法解决AWS Lambda上的gem加载错误。

{
  "errorMessage": "LoadError: libpq.so.5: cannot open shared object file: No such file or directory - /var/task/vendor/bundle/ruby/2.5.0/gems/pg-1.1.4/lib/pg_ext.so",
  "errorType": "Function<Sequel::AdapterNotFound>",
  "stackTrace": [
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/task/vendor/bundle/ruby/2.5.0/gems/pg-1.1.4/lib/pg.rb:4:in `<top (required)>'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/adapters/postgres.rb:6:in `<top (required)>'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/lang/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'",
    "/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/database/connecting.rb:88:in `load_adapter'",
    "/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/database/connecting.rb:17:in `adapter_class'",
    "/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/database/connecting.rb:45:in `connect'",
    "/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/core.rb:121:in `connect'",
    "/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/core.rb:399:in `adapter_method'",
    "/var/task/vendor/bundle/ruby/2.5.0/gems/sequel-5.16.0/lib/sequel/core.rb:406:in `block (2 levels) in def_adapter_method'",
    "/var/task/lib/warehouse/loader.rb:5:in `connection'",
    "/var/task/lib/warehouse/loader.rb:24:in `initialize'",
    "/var/task/lib/warehouse/update.rb:43:in `new'",
    "/var/task/lib/warehouse/update.rb:43:in `block in handle'",
    "/var/task/lib/warehouse/update.rb:42:in `each'",
    "/var/task/lib/warehouse/update.rb:42:in `handle'",
    "/var/task/lambda.rb:11:in `handler'"
  ]
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Sequel库从AWS Lambda建立PSQL连接,但似乎该函数找不到so文件。我已将依赖关系打包到vendor/bundle,在CodeBuild上的Ubuntu中内置,并验证了.so文件是否存在于上载到lambda的结果工件中。我还编辑了$ …

ruby rubygems pg sequel aws-lambda

3
推荐指数
1
解决办法
570
查看次数

如何检查续集中的约束

如何创建CHECK约束以检查续集中的一系列可能值.一个Ruby ORM.

所有尝试似乎都会CHECK (1 = 0)在输出日志中看到.

这是我正在尝试使用Sequel的DSL建模的表格:

create table memberships(  
      id integer primary key autoincrement
    , group_id integer references groups(id) on delete cascade
    , user_id integer references users(id) on delete cascade
    , role char check (role in ('u','a','o')) default 'u'
    , unique(group_id, user_id, role)   
);
Run Code Online (Sandbox Code Playgroud)

这是续集架构生成代码:

db.create_table(:memberships){
    primary_key :id
    foreign_key :user_id, :users
    foreign_key :group_id, :groups  
    char :role, default: 'u'
    check{role=='u' or role=='a'} #<-----this line generates CHECK (1 = 0)
    unique [:user_id, :group_id, :role]
}
Run Code Online (Sandbox Code Playgroud)

ruby sequel

2
推荐指数
1
解决办法
1641
查看次数