MySQLデータベースのdatetime列を、Rubyのdatetimeオブジェクト(文字列型オブジェクトではない)としてenumarableするMysqlの宝石の結果にロードする方法はありますか?例えばRuby mysql gem - 照会中に文字列への日時自動キャストを回避する方法
:データベース側で
我々は次のインサートと、このテーブルを持っている:
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)
私は、今後の "string"値を明示的にdatetimeオブジェクトにキャストできます。
しかし、私はそうではないと信じています。私は自分の行がまったく同じ行タイプ(pl/sql専門用語)、すなわち各フィールドがデータベース列タイプに対応するようにしたい。つまり、
row['last_update_date']
は "datetime"データ型でなければなりません。
レールのActiveRecordを使用せずにRubyでこれを実現する暗黙的な方法はありますか?
よろしく、
最初にコメントをいただきありがとうございます。私はSequelを試しました。残念ながら、まったく同じエラーです。 ActiveRecordは私の目的にとっては重すぎます(database.ymlの設定が必要です)。とにかく、もう一度お返事ありがとうございます。 –
Sequelは正しいタイプにキャストする前にスキーマが何であるかを知る必要があるかもしれません。あなたの人生をもっと楽にするために、それをモデルで定義する方法があります。 – tadman
@MehmetKaplanはあなたが何を意味するのかわからない*多くの設定に必要*これは 'ActiveRecord :: Base.establish_connection'を使用する単一のファイル(私たちは常に使用します)です。 'mysql2'宝石はあなたのためにタイプキャストしようとしますが、これは*"プリミティブ "*でもあなたが必要とするかもしれないと述べています。 'mysql'宝石は現在管理されていないので、' mysql2'が基本的にそれを置き換えたので、私は変更を期待しません。 – engineersmnky