标签: sequel

SQLite/Sequel:Dataset#max 返回日期和时间戳的字符串

我使用Dataset#max日期和时间戳列 ( DB[:data].max(:timestamp),但我得到一个字符串作为结果,而不是时间戳或日期。

例子:

require 'sequel'
DB = Sequel.sqlite()
#~ DB.use_timestamp_timezones = true #no effect
DB.create_table(:data){
  Fixnum :num
  timestamp :timestamp
  Date :date
} unless DB.table_exists?(:data)

#Insert some testdata
1.upto(10){|i|
  DB[:data].insert(i, Time.now - 24*60*60*i, Date.today - i)
}

#
#my self written max function.
#
def max(ds,field)
    timestamp = nil
    ds.select(field).each{|ds|
      timestamp = ds[field] if ! timestamp or timestamp < ds[field]
    }
    timestamp
end


##Ok
p max(DB[:data],:num)
p DB[:data].max(:num)   #ok

p max(DB[:data],:timestamp)     #timestamp -> ok
p DB[:data].max(:timestamp)     #String!! …
Run Code Online (Sandbox Code Playgroud)

ruby sqlite sequel

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

如何在我的续集类中定义我的表所有者/架构?

我试图查询的表名为cache.dashboardstats

我的模型是:

class Dashboard < Sequel::Model(:dashboardstats)
 set_schema do
    set_primary_key :dashboardstatid
  end
end
Run Code Online (Sandbox Code Playgroud)

这创建了一个select * from "dashboardstats";

如何定义“缓存”的所有者/架构,以便我的查询变为:

select * from cache."dashboardstats";

ruby sequel

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

如何使用续集 ORM 和 postgresl 对 sum 和 count 进行分组?

这对我来说太难了。是给杰瑞米的!

我有两个表(虽然我也可以设想需要加入第三个表),我想在同一个表中对一个字段求​​和并计算行数,同时与另一个表连接并以 json 格式返回结果。

首先需要求和的数据类型字段是numeric(10,2),插入的数据为params['amount'].to_f.

这些表是具有项目名称和公司 ID 的费用_项目以及具有公司 ID、项目和金额(仅提及关键列)的费用_项目 - “公司 ID”列已消除歧义。

所以,下面的代码:

expense_items = DB[:expense_projects].left_join(:expense_items, :expense_project_id => :project_id).where(:project_company_id => company_id).to_a.to_json
Run Code Online (Sandbox Code Playgroud)

工作正常,但当我添加

expense_total = expense_items.sum(:amount).to_f.to_json
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,上面写着

TypeError - no implicit conversion of Symbol into Integer:
Run Code Online (Sandbox Code Playgroud)

所以,第一个问题是为什么以及如何解决这个问题?

然后我想加入两个表并从左侧(第一个表)中获取所有项目名称,并在第二个表中求和数量和计数项目。我试过了

DB[:expense_projects].left_join(:expense_items, :expense_items_company_id => expense_projects_company_id).count(:item).sum(:amount).to_json
Run Code Online (Sandbox Code Playgroud)

以及它的变体,所有这些都失败了。

我想要一个获取所有项目名称的结果(即使没有费用条目并返回如下内容:

project  item_count item_amount
pr 1      7           34.87
pr 2      0           0
Run Code Online (Sandbox Code Playgroud)

等等。如何通过一个查询以 json 格式返回结果来实现这一点?

非常感谢,伙计们。

ruby postgresql sequel

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

将表列移动到新表并在 PostgreSQL 中作为外键引用

假设我们有一个带有字段的数据库表

"id", "category", "subcategory", "brand", "name", "description", etc. 
Run Code Online (Sandbox Code Playgroud)

category,subcategorybrand 原始表中的相应列和行创建单独的表成为外键引用的好方法是什么 ?

概述所涉及的操作:

  • 获取原始表的每一列中应该成为外键的所有唯一值;
  • 为那些创建表
  • 在原始表(或副本)中创建外键引用列

在这种情况下,PostgreSQL 数据库是通过 Ruby 应用程序中的 Sequel 访问的,因此可用的接口是命令行、Sequel、PGAdmin 等...

问题:你会怎么做?

ruby sql postgresql data-modeling sequel

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

Sequel 中的多行插入

是否可以在 Sequel 中插入多行,以及如何完成?谁能给我解释一下吗?

我尝试过这样的事情:

DB[:table].insert([:x, :y], [[1, 2], [3, 4]])
Run Code Online (Sandbox Code Playgroud)

但没有成功。

ruby sequel

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

如何使用“sequel -s”忽略丢失的迁移

我正在尝试使用 Sequel 来管理数据库的迁移,有时,由于功能分支,数据库有时会应用文件系统中不存在的迁移。

默认情况下,当我sequel -m在这些情况下应用迁移时,我会收到此错误:

Error: Sequel::Migrator::Error: Applied migration files not in file system
Run Code Online (Sandbox Code Playgroud)

Migrations ”说有一个选择:

忽略缺失的迁移

在某些情况下,您可能希望允许在文件系统中不存在的数据库中进行迁移(例如,在部署自动迁移时部署到旧版本的代码而不运行向下迁移)。如果需要,您可以传递 :allow_missing_migration_files => true 作为选项。如果数据库中存在文件系统中不存在的迁移,这将阻止引发错误。

好的!

我如何将该allow_missing_migration_files选项传递给sequel -m

ruby sequel

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

如何将 Sequel 结果序列化为 JSON

这是我的模型

class Client < Sequel::Model(:clients)
end
Run Code Online (Sandbox Code Playgroud)

当我执行

Client.first.to_json
Run Code Online (Sandbox Code Playgroud)

我得到

"\"#<Client:0x2594b824>\""
Run Code Online (Sandbox Code Playgroud)

但是当我执行

DB[:clients].first.to_json
Run Code Online (Sandbox Code Playgroud)

我正确地得到:

{id: 1, name: "Someone" ... }
Run Code Online (Sandbox Code Playgroud)

我做错了什么?...我也尝试使用Client.dataset.first.json具有相同的结果。

此外,我正在使用 MS Access DB,但我认为这并不重要。

ruby json sequel

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

使用Sequel ORM时; 何时使用Core或Model?

我希望通过编写一些Web服务来扩展我的ruby知识,而不仅仅是脚本,测试代码和文件解析器.我正在考虑将续集用作ORM.

使用Sequel Core或Sequel Model有什么优势?我应该注意什么?挑选一个或另一个有什么经验法则?

ruby orm sequel

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

如何使用续集将表字段与字符串连接起来

我想用Sequel版本替换遗留的sql语句,并且有问题要解决创建一个连接字段.

一个例子:

require 'sequel'
DB = Sequel.sqlite
DB.create_table(:test){
  field :text, :type => :nvarchar, :size => 5
}
DB[:test].insert('aa')
DB[:test].insert('bb')
DB[:test].insert('cc')


sel = DB[:test].select(
  (:text + '1' ).as(:concat)
  )
puts sel.sql
puts sel.all
Run Code Online (Sandbox Code Playgroud)

这很好用,结果是:

SELECT (`text` || '1') AS 'concat' FROM `test`
{:concat=>"aa1"}
{:concat=>"bb1"}
{:concat=>"cc1"}
Run Code Online (Sandbox Code Playgroud)

我的问题:我需要'1aa'.使用SQL这没有问题:

puts DB.fetch("SELECT ('1' || `text`) AS 'concat' FROM `test`").all
Run Code Online (Sandbox Code Playgroud)

但是对于ruby我收到了语法错误(can't convert Symbol into String (TypeError):

sel = DB[:test].select(
  ('1' + :text).as(:concat)
  )
Run Code Online (Sandbox Code Playgroud)

有趣的是,这再次有效:

sel = DB[:test].select(
  (:text + '1' + :text).as(:concat)
  )
puts …
Run Code Online (Sandbox Code Playgroud)

ruby concat concatenation sequel

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

如何使用Ruby Sequel加入3个表?

我有一个数据库,其中笔记本和Notes具有many_to_many关系,Notes和Facts具有many_to_many关系.如何使用Ruby Sequel查询与给定Notebook关联的事实(通过注释间接关联).我应该在笔记本和事实之间创建另一个many_to_many关系吗?会更快吗?

ruby sql join sequel

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

标签 统计

ruby ×10

sequel ×10

postgresql ×2

sql ×2

concat ×1

concatenation ×1

data-modeling ×1

join ×1

json ×1

orm ×1

sqlite ×1