2016-02-19 5 views
0

J'essaie d'importer les données dans postgresql à partir de fichiers CSV comme suit.J'ai une erreur lorsque j'importe les données dans postgresql à partir du fichier csv avec `sequel`

csv = CSV.open(path, { col_sep: ',', headers: :first_row }) 

MatchDB.db.copy_into(:property, 
    data: csv, 
    format: :csv 
) 

Mais j'ai eu une erreur comme celle-ci.

TypeError: wrong argument type CSV::Row (expected String) 

Quelqu'un sait comment résoudre ce problème?

+0

Voulez-vous s'il vous plaît lier une documentation sur 'MatchDB' ? – mudasobwa

+0

Il est juste connecter DB.def self.db @@ db || = Sequel.connect ( adaptateur: 'postgres', base de données : appariements, utilisateur : 'maître', hôte: 'localhost' , mot de passe: '123456' ) fin –

Répondre

0

Comme vous pouvez le voir dans Sequel’s tests, la méthode Database#copy_into attend une chaîne avec des colonnes séparées par des virgules et des lignes séparées par un séparateur de ligne \n.

Vous essayez de passer une représentation interne de ruby ​​CSV, ce qui [est en général un peu] un tableau de tableaux. Je ne suis pas un gourou en ruby ​​CSV, mais de faire une chaîne appropriée hors de celui-ci, on peut utiliser:

csv.map { |row| row.join ',' }.join "\n" 

Le résumé:

csv = CSV.open(path, { col_sep: ',', headers: :first_row }) 

MatchDB.db.copy_into(:property, 
    data: csv.map { |row| row.join ',' }.join "\n", 
    format: :csv 
)