【发布时间】:2021-11-13 06:06:59
【问题描述】:
我有一个 rake 任务,它应该导入我通过将 3 个 CSV 文件与 Pandas 和 Python 合并创建的 CSV 文件(我是 Ruby 和 Rails 的新手,所以这就是我使用 Pandas 的原因) .
这是我使用 rails generate task import import_csv 创建的 rake 任务,当我运行 rake -T 时可以看到它。
namespace :import do
desc "Import finalCsv.csv into database"
task import_csv: :environment do
require 'csv'
filename = "#{Rails.root}/db/finalCsv.csv"
CSV.foreach(filename, headers: true) do |row|
WorkOrder.create!(row.to_hash)
end
end
end
这是我将 3 个原始 CSV 合并在一起的 python 脚本。
import pandas as pd
locations = pd.read_csv("locations.csv")
technicians = pd.read_csv("technicians.csv")
workOrders = pd.read_csv("work_orders.csv")
workOrders = workOrders.merge(technicians, how="inner", left_on="technician_id", right_on="id")
workOrders = workOrders.merge(locations, how="right", left_on="location_id", right_on="id")
workOrders = workOrders.rename(columns={"name_x": "Full Name", "name_y": "Company"})
workOrders = workOrders.drop(labels = ["id_x", "id_y", "id"], axis=1)
finalCsv = workOrders.to_csv("finalCsv.csv", encoding="utf-8")
print(finalCsv)
这里还有我的迁移和架构文件。
迁移:
def change
create_table :work_orders do |t|
t.integer :technician_id
t.integer :location_id
t.time :time
t.integer :duration
t.integer :price
t.string :FullName
t.string :Company
t.string :City
t.timestamps
end
end
end
架构:
create_table "work_orders", force: :cascade do |t|
t.integer "technician_id"
t.integer "location_id"
t.time "time"
t.integer "duration"
t.integer "price"
t.string "FullName"
t.string "Company"
t.string "City"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
end
最后,当我在 Rails 控制台中运行 WorkOrder.all(我的模型)或 WorkOrder.new 时,两者都是有效的,所以我对这里出了什么问题感到有些困惑。有什么想法吗?
【问题讨论】:
标签: python ruby-on-rails ruby pandas sqlite