11
votes

Comment insérer plusieurs enregistrements dans la base de données

Comment puis-je insérer plusieurs enregistrements dans une base de données à l'aide de la syntaxe des rails.

INSERT INTO users (email,name) VALUES ('a@ao.in','a'),('b@ao.in','b'),
                                      ('c@ao.in','c');


0 commentaires

7 Réponses :


-1
votes

Il suffit de passer un tableau de hachage à la méthode Crée comme ceci: xxx


2 commentaires

Sur l'exécution de ces deux requêtes d'insert ont été effectuées.


Vous feriez mieux de remarquer cela dans votre question



12
votes

Bien que vous ne puissiez pas obtenir le SQL exact que vous avez là, vous pouvez insérer plusieurs enregistrements en passant crée ou neuf sur un tableau de hachage:

new_records = [
  {:column => 'value', :column2 => 'value'}, 
  {:column => 'value', :column2 => 'value'}
]

MyModel.create(new_records)


3 commentaires

Sur l'exécution de ces deux requêtes d'insert ont été effectuées.


Comment pouvons-nous ne pas exécuter qu'une seule requête Insérer et insérer les deux enregistrements.


Je ne crois pas que ce soit possible avec Aciverecord. Vous voudrez peut-être consulter ce post et AR-Extensions Stackoverflow.com/Questtions/4256898/...



10
votes

J'utilise la suite dans mon projet, mais ce n'est pas approprié pour l'injection SQL. Si vous n'utilisez pas l'entrée de l'utilisateur dans cette requête, cela peut fonctionner pour vous

user_string = " ('a@ao.in','a'), ('b@ao.in','b')"
User.connection.insert("INSERT INTO users (email, name) VALUES"+user_string) 


0 commentaires

14
votes

Découvrez ce blog post: http : //www.igvita.com/2007/07/11/freficient-Updates-Data-Import-in-Rails/ XXX

Selon votre version des rails, utilisez ActiveRecord-Import 0.2.6 (pour rails 3) et AR-extensions 0.9.4 (pour rails 2)

de l'auteur: http://www.continuertiking.com/tags/arext


4 commentaires

J'ai utilisé AR-Extensions 0.9.4 Étant donné que ma version de Rails est 2.3.5. Mais toujours lorsque j'exécute cette déclaration, deux requêtes d'insertion sont en cours d'exécution.


Amal, l'avez-vous obtenu? Sinon, veuillez mettre à jour votre message ici pour montrer ce que vous faites ou poser une nouvelle question avec des informations plus détaillées.


J'ai pu résoudre mon problème en utilisant cette méthode. user_string = "('a@ao.in', 'a'), ('b@ao.in', 'b')" user.connection.inserser ("insérer dans les utilisateurs (e-mail, nom)" + user_string ). J'ai essayé toutes les autres méthodes spécifiées ici, mais dans tout autre cas, plus d'une requête d'insertion étaient exécutées


J'ai eu la même nécessité de charger des données d'un CSV dans une table. Cette solution a directement répondu à la question posée, ce qui entraîne un seul insert. J'ai trouvé que c'était beaucoup plus rapide qu'un individu .first_or_initialize () (rails 4 ici) pour chaque ligne du CSV.



0
votes

dans peuple_controller.rb xxx


0 commentaires

0
votes

Vous pouvez utiliser Semoir rapide pour effectuer plusieurs inserts.


0 commentaires

4
votes

Juste une utilisation d'une utilisation d'activerecord-Import pour rails 3 ou AR-Extensions pour rails 2

https://github.com/zdennis/acterecord-import/wiki

dans gemfile: xxx

dans le modèle: xxx

dans le contrôleur: xxx

Ce code importer 10 enregistrements d'une requête;)

ou xxx


2 commentaires

Son important à noter que ActiveRecord-Import ne renvoie pas les ID des lignes insérées.


Bonne recommandation. Le gemme gère une requête.