有沒有辦法將MySQL數據庫的日期時間列加載到Mysql gem的結果可以作爲Ruby datetime對象(不是字符串類型的對象)?如何避免日期時間自動轉換爲字符串,而查詢
例如:
在數據庫方面,我們有這個表具有以下插入:
create table ContentDB.test_table
(
id integer primary key auto_increment,
last_update_date datetime,
value varchar(128)
);
insert into ContentDB.test_table(last_update_date, value) values (sysdate(), 'Some test stuff..');
commit;
而在Ruby端,我們有以下的代碼(如一個文件名爲test.rb):
require 'rubygems'
require 'mysql'
require 'date'
begin
con = Mysql.new "localhost", "root", "root", "ContentDB"
rs = con.query "select * from test_table"
rs.each_hash do |row|
l_datetime_field = row['last_update_date'].strftime("%Y%m%d%H%M%S")
end
con.close
end
這給了以下錯誤:
test.rb:9:in `block in <main>': undefined method `strftime' for "2017-03-06 22:15:17":String (NoMethodError)
我知道我可以將即將到來的「字符串」值明確地轉換爲日期時間對象。
但我相信,它不應該是這樣。我希望我的行與rowtype(pl/sql行話)完全相同,即每個字段都與數據庫列類型相對應。也就是說
row['last_update_date']
必須是「日期時間」數據類型。
有沒有一種隱含的方式來實現這一點在Ruby中,而不使用rails的ActiveRecord?
最好的問候,
首先感謝您的評論。我剛剛嘗試過續集。不幸的是同樣的錯誤。 ActiveRecord對於我的目的來說太重了(需要使用與database.yml相同的配置)。無論如何,再次感謝您的答案。 –
續集可能需要在投射到正確的類型之前知道您的模式。它有一種在模型中定義它的方式,讓你的生活變得更容易。 – tadman
@MehmetKaplan不知道你的意思*需要多大的配置*這可以是一個使用'ActiveRecord :: Base.establish_connection'的文件(我們一直使用它)。 'mysql2' gem會嘗試爲你打字,儘管他們聲明這是*「primitive」*,但可能是你需要的。 'mysql' gem現在沒有維護,所以我不希望有任何更改,因爲'mysql2'現在已經基本上取代了它。 – engineersmnky