2013-03-05 1 views
2

Je construis un site Web Perl à l'aide de Catalyst. Le site permettra aux utilisateurs de télécharger un grand fichier texte (100 000 lignes ou plus) pour le traitement. J'ai besoin de convertir chaque ligne en une ligne dans une base de données MySQL.Ajout de plusieurs éléments à un modèle dans un catalyseur

J'utilise le modèle de Catalyst très agréable DBIC::Schema, comme détaillé dans the tutorial:

$c->model('DB::Book')->create({ 
     title => $title, 
     rating => $rating, 
    }); 

Cette insère une ligne dans la base de données appropriée. Cependant, il est beaucoup trop lent pour insérer des dizaines de milliers de lignes une à la fois. Est-il possible d'utiliser cette interface pour insérer plusieurs lignes avec une requête?

Il devrait être facile à déterminer à partir de la documentation, mais je ne peux pas savoir où create() est documentée.

J'ai essayé l'évidence, un tableau de références de hachage:

my @rows = (
    { foo=>1,bar=>2 }, 
    { foo=>2,bar=>3 } 
); 

$c->model('DB::MyTable')->create(@rows); 

Cependant, cela ne fonctionne pas. Il insère seulement la première rangée.

Des idées?

Répondre

3

La documentation pour créer peut être trouvée dans le DBIx::Class::ResultSet docs. créer uniquement des insertions d'une seule ligne, pour les insertions en vrac, vous pouvez utiliser populate de la même classe.

+0

+1, merci pour le lien de documentation. Je vais essayer de "peupler". –

+0

Ceci l'a résolu. L'opération d'insertion est passée de 30 minutes à quelques secondes. Votre aide est tres apprecie! –

Questions connexes