gpt4 book ai didi

ruby - 续集:如何获取数据集列的数据类型

转载 作者:数据小太阳 更新时间:2023-10-29 08:28:08 26 4
gpt4 key购买 nike

如何获取数据集列的数据类型。或者更笼统:如何获取数据集的架构?

假设我有以下情况:

require 'sequel'
DB = Sequel.sqlite()
DB.create_table(:data){
nvarchar :key
timestamp :timestamp
Date :date
}

sel = DB[:data].select(:key, :timestamp)

现在我想知道,我选择的 timestamp 列是哪种数据类型。

我想得到类似 Sequel::Dataset#columntype(column) 的东西。

我做了这样的解决方案:

module Sequel
class Dataset
def schema()
schema = []
self.db.schema(self).each{|colid, coldef|
next unless self.columns.include?(colid)
schema << [colid, coldef]
}
schema
end

def columntype(colname)
self.schema.each{|colid, coldef|
next unless colid == colname
return coldef[:type]
}
raise ArgumentError, "#{colname} not part of #{self.inspect}"
end
end
end

p sel.schema #-> [[:key, {:allow_null=>true, :default=>nil, :primary_key=>false,....
p sel.columntype(:timestamp) #-> :datetime
p sel.columntype(:key) #-> :string
p sel.columntype(:date) #-> ArgumentError

但是这个解决方案看起来有点不对,而且它对连接不起作用:

p sel.join(:data).columntype(:timestamp)
#-> `schema': can only parse the schema for a dataset with a single from table (Sequel::Error)

我也试过 Dataset#schema_and_table,但没有成功:

p sel.schema_and_table(sel.first_source_table) #-> [nil, "data"]

是否还有其他我没有在文档中找到的方法?

最佳答案

在 Sequel 中,数据集不知道其列的类型。对于任何复杂的事情,了解列类型的唯一方法是运行查询(想想列别名、函数调用、CTE 等)。即使那样,您也必须根据 Sequel 提供给您的 ruby​​ 类型来猜测数据库类型。

您可以使用带有表名的Database#schema 来获取该表的架构信息。这是从 Sequel 中的数据库中获取类型信息的唯一受支持的方法。

关于ruby - 续集:如何获取数据集列的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com