ruby,尝试将csv导入内存中数据库的列数错误
我在尝试将数据从文件导入数据库进行测试时遇到问题。在Ruby shell中,以下代码完全符合我的预期:ruby,尝试将csv导入内存中数据库的列数错误,ruby,sqlite,csv,sequel,Ruby,Sqlite,Csv,Sequel,我在尝试将数据从文件导入数据库进行测试时遇到问题。在Ruby shell中,以下代码完全符合我的预期: jruby-1.7.4 :001 > require('sequel') => true jruby-1.7.4 :002 > require('csv') => true jruby-1.7.4 :003 > file = CSV.read('./spec/test_data/registration_sessions.csv') => [["01"
jruby-1.7.4 :001 > require('sequel')
=> true
jruby-1.7.4 :002 > require('csv')
=> true
jruby-1.7.4 :003 > file = CSV.read('./spec/test_data/registration_sessions.csv')
=> [["01", "EG000000001"], ["02", "EG000000002"], ["03", "EG000000002"]]
jruby-1.7.4 :004 > db = Sequel.connect('jdbc:sqlite::memory:')
=> #<Sequel::JDBC::Database: "jdbc:sqlite::memory:">
jruby-1.7.4 :005 > db.create_table(:registration_sessions) do
jruby-1.7.4 :006 > Integer :id
jruby-1.7.4 :007?> String :device_serial
jruby-1.7.4 :008?> end
=> nil
jruby-1.7.4 :009 > db[:registration_sessions]
=> #<Sequel::JDBC::Dataset: "SELECT * FROM `registration_sessions`">
jruby-1.7.4 :010 > db[:registration_sessions].import(db[:registration_sessions].columns, file)
=> ["INSERT INTO `registration_sessions` (`id`, `device_serial`) VALUES ('01', 'EG000000001')", "INSERT INTO `registration_sessions` (`id`, `device_serial`) VALUES ('02', 'EG000000002')", "INSERT INTO `registration_sessions` (`id`, `device_serial`) VALUES ('03', 'EG000000002')"]
jruby-1.7.4 :012 > db[:registration_sessions].all
=> [{:id=>1, :device_serial=>"EG000000001"}, {:id=>2, :device_serial=>"EG000000002"}, {:id=>3, :device_serial=>"EG000000002"}]
当我运行测试时,这将导致以下结果:
14) RegistrationMetricsQueries #get_registration_metrics should return only durations for sessions that contain the start and end moment
Failure/Error: seed_test_data(registration_metrics_db[:registration_sessions], session_seed_data)
Sequel::Error:
Different number of values and columns given to insert_sql
# ./spec/services/tablet_usage_queries_spec.rb:88:in `seed_test_data'
# ./spec/services/registration_metrics_queries_spec.rb:10:in `(root)'
15) RegistrationMetricsQueries #get_registration_metrics should return durations in seconds for valid registration sessions, which contain the start and end moment
Failure/Error: seed_test_data(registration_metrics_db[:registration_sessions], session_seed_data)
Sequel::Error:
Different number of values and columns given to insert_sql
# ./spec/services/tablet_usage_queries_spec.rb:88:in `seed_test_data'
# ./spec/services/registration_metrics_queries_spec.rb:10:in `(root)'
我做错了吗
编辑:哦,还有我的样本数据
01,EG000000001
02,EG000000002
03,EG000000002
事实证明,问题是由于未能插入。有一个表连接发生在后台,它导致Sequel被锁定,因为sqlite不支持正确的连接。我正在迁移测试,以使用实际的mysql数据库,而不是内存中的sqlite db
01,EG000000001
02,EG000000002
03,EG000000002