ruby – 使用SQLite和Sequel的布尔值
发布时间:2020-12-17 02:32:00 所属栏目:百科 来源:网络整理
导读:续集支持布尔类型. 它在SQLite中将true和false存储为t和f. 如果再次读取,数据将转换回true和false SQLite本身更喜欢将true存储为1,将false存储为0(并且一些SQLite-administartion工具期望它). 如果我将我的布尔值也存储为’1′,Sequel还会将值转换为’true’
续集支持布尔类型.
它在SQLite中将true和false存储为t和f. 如果再次读取,数据将转换回true和false SQLite本身更喜欢将true存储为1,将false存储为0(并且一些SQLite-administartion工具期望它). require 'sequel' DB = Sequel.sqlite()#'test.db') DB.create_table(:test){ boolean :my_truth nvarchar :descr,:size => 10 } DB[:test].insert(1,'1') p DB[:test].filter(:descr => '1').first #-> {:my_truth=>true,:descr=>"1"} 但如果我选择为true,则找不到任何值: DB[:test].filter(:my_truth => true).each{|ds| puts "t%s" % ds[:descr] } 找到值true和“t”: DB[:test].insert(true,'true') DB[:test].insert('t','"t"') DB[:test].filter(:my_truth => true).each{|ds| puts "t%s" % ds[:descr] #true and 't' } 像0这样的假值有类似的情况……(参见问题后的示例代码) 所以我的问题: 我不是在寻找像DB [:test] .filter(:my_truth => [true,1])这样的东西 类似的问题Activerecord 我使用Sequel 3.33.0 示例代码: require 'sequel' DB = Sequel.sqlite()#'test.db') DB.create_table(:test){ boolean :my_truth nvarchar :descr,:size => 10 fixnum :line #code line,where data is inserted } #All true: DB[:test].insert(true,'true',__LINE__) DB[:test].insert('true','"true"',__LINE__) DB[:test].insert(1,'one',__LINE__) DB[:test].insert('t','t',__LINE__) #All false: DB[:test].insert(false,'false',__LINE__) DB[:test].insert('false','"false"',__LINE__) DB[:test].insert(0,'zero',__LINE__) DB[:test].insert('f','f',__LINE__) DB[:test].insert('F','F',__LINE__) DB[:test].insert(nil,'nil',__LINE__) DB[:test].insert('n','n',__LINE__) DB[:test].insert('N','N',__LINE__) #Also true DB[:test].insert('x','x',__LINE__) DB[:test].insert(' ','space',__LINE__) DB[:test].insert('','empty',__LINE__) puts "All true values:" DB[:test].filter(:my_truth => true).each{|ds| puts "t%s (line %i)" % [ds[:descr],ds[:line] ] } puts "All false values:" DB[:test].filter(:my_truth => false).each{|ds| puts "t%s (line %i)" % [ds[:descr],ds[:line] ] } puts "Data:" DB[:test].each{|ds| puts "t%-5s is <%s> (line %i)" % [ ds[:descr],ds[:my_truth].inspect,ds[:line] ] } 结果: All true values: true (line 10) t (line 13) All false values: false (line 16) f (line 19) Data: true is <true> (line 10) "true" is <true> (line 11) one is <true> (line 12) t is <true> (line 13) false is <false> (line 16) "false" is <false> (line 17) zero is <false> (line 18) f is <false> (line 19) F is <false> (line 20) nil is <nil> (line 21) n is <false> (line 22) N is <false> (line 23) x is <true> (line 26) space is <true> (line 27) empty is <true> (line 28) 解决方法
您可以使用integer_booleans设置将1/0用作true / false,而不是’t’/’f’,请参阅
http://sequel.rubyforge.org/rdoc-adapters/classes/Sequel/SQLite/DatabaseMethods.html.以下是一个示例:
DB = Sequel.sqlite(:integer_booleans=>true) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |