我使用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) 我试图查询的表名为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";
这对我来说太难了。是给杰瑞米的!
我有两个表(虽然我也可以设想需要加入第三个表),我想在同一个表中对一个字段求和并计算行数,同时与另一个表连接并以 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 格式返回结果来实现这一点?
非常感谢,伙计们。
假设我们有一个带有字段的数据库表
"id", "category", "subcategory", "brand", "name", "description", etc.
Run Code Online (Sandbox Code Playgroud)
为category,subcategory和brand
原始表中的相应列和行创建单独的表成为外键引用的好方法是什么
?
概述所涉及的操作:
在这种情况下,PostgreSQL 数据库是通过 Ruby 应用程序中的 Sequel 访问的,因此可用的接口是命令行、Sequel、PGAdmin 等...
问题:你会怎么做?
是否可以在 Sequel 中插入多行,以及如何完成?谁能给我解释一下吗?
我尝试过这样的事情:
DB[:table].insert([:x, :y], [[1, 2], [3, 4]])
Run Code Online (Sandbox Code Playgroud)
但没有成功。
我正在尝试使用 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?
这是我的模型
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,但我认为这并不重要。
我希望通过编写一些Web服务来扩展我的ruby知识,而不仅仅是脚本,测试代码和文件解析器.我正在考虑将续集用作ORM.
使用Sequel Core或Sequel Model有什么优势?我应该注意什么?挑选一个或另一个有什么经验法则?
我想用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) 我有一个数据库,其中笔记本和Notes具有many_to_many关系,Notes和Facts具有many_to_many关系.如何使用Ruby Sequel查询与给定Notebook关联的事实(通过注释间接关联).我应该在笔记本和事实之间创建另一个many_to_many关系吗?会更快吗?