slogan3

Maak een Ruby-script voor het automatiseren van gegevensmigratie tussen databases

description

Dit bespaart je tijd en vermindert fouten bij handmatige gegevensmigratie, en biedt een betrouwbare methode voor het overdragen van gegevens tussen databases.

prompt

try_prompt

Help me een Ruby-script schrijven dat de migratie van gegevens van {{bron_database}} naar {{doel_database}} automatiseert. Geef de tabellen en velden die ik moet migreren, samen m ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld Ruby-script dat de migratie van gegevens van een bron MySQL-database naar een doel MySQL-database automatiseert. Het script biedt basisfunctionaliteit, inclusief foutafhandeling en logging. Pas het script aan je specifieke tabellen en velden aan. ```ruby require 'mysql2' require 'logger' # Configuratie BRON_DB_CONFIG = { host: 'localhost', username: 'gebruiker', password: 'wachtwoord', database: 'bron_db' } DOEL_DB_CONFIG = { host: 'localhost', username: 'gebruiker', password: 'wachtwoord', database: 'doel_db' } LOG_FILE = 'migratie.log' # Initialize logger logger = Logger.new(LOG_FILE) logger.level = Logger::INFO # Connecties maken begin bron_client = Mysql2::Client.new(BRON_DB_CONFIG) doel_client = Mysql2::Client.new(DOEL_DB_CONFIG) logger.info("Verbonden met bron- en doel-databases.") rescue Mysql2::Error => e puts "Fout bij verbinden met database: #{e.message}" logger.fatal("Verbindingsfout: #{e.message}") exit end # Definieer je tabellen en velden die je wilt migreren # Bijvoorbeeld: migratie_schema = { 'tabel1' => { 'velden' => ['id', 'naam', 'datum'], 'transformaties' => { 'datum' => :format_datum # voorbeeld transformatie } }, # Voeg meer tabellen toe indien nodig } # Helper functie voor datumformattering def format_datum(value) # Pas aan op basis van je datumformaat Date.parse(value).strftime('%Y-%m-%d') rescue nil end # Migratieproces migratie_schema.each do |tabel, info| begin # Lees alle gegevens uit de bron tabel resultaten = bron_client.query("SELECT #{info['velden'].join(', ')} FROM #{tabel}") resultaten.each do |row| # Pas transformaties toe if info['transformaties'] info['transformaties'].each do |veld, transactie| waarde = row[veld] case transactie when :format_datum row[veld] = format_datum(waarde) # Voeg meer transformaties toe indien nodig end end end # Maak een insert statement voor de doel-database velden = info['velden'] waarden = velden.map { |v| "'#{bron_client.escape(row[v].to_s)}'" } insert_sql = "INSERT INTO #{tabel} (#{velden.join(', ')}) VALUES (#{waarden.join(', ')})" # Voer de insert uit doel_client.query(insert_sql) logger.info("Geseed: #{tabel} - #{row}") end rescue Mysql2::Error => e puts "Fout bij migreren van tabel #{tabel}: #{e.message}" logger.error("Fout bij tabel #{tabel}: #{e.message}") end end # Sluit de verbindingen bron_client.close doel_client.close logger.info("Migratie voltooid en verbindingen gesloten.") ``` **Aanpassingen die je moet maken:** - Vervang de `migratie_schema` met je eigen tabellen en velden. - Voeg eventuele transformaties toe in de `transformaties` hash. - Pas de datumnotaties en andere transformaties aan indien nodig. - Controleer of je juiste escape-methoden gebruikt om SQL-injectie te voorkomen. **Let op:** - Zorg dat de doel-database bestaat en dat de tabellen al aangemaakt zijn of voeg code toe om ze aan te maken. - Test het script eerst op een kleine dataset om fouten te voorkomen. Heeft u verdere vragen of hulp nodig bij het aanpassen van het script?
provider: deepseek
model: deepseek-chat
Zeker! Hier is een Ruby-script dat de migratie automatiseert met foutafhandeling en logging: ```ruby require 'mysql2' require 'logger' # Configuratie BRON_DB = { host: 'localhost', username: 'gebruiker', password: 'wachtwoord', database: 'bron_db' } DOEL_DB = { host: 'localhost', username: 'gebruiker', password: 'wachtwoord', database: 'doel_db' } # Logging instellen log = Logger.new('migratie.log') log.level = Logger::INFO log.datetime_format = '%Y-%m-%d %H:%M:%S' # Tabellen en transformaties configuratie TABELLEN_CONFIG = { 'gebruikers' => { velden: ['id', 'naam', 'email', 'aangemaakt_op'], transformaties: { # Voorbeeld: email naar lowercase 'email' => ->(waarde) { waarde.downcase if waarde } } }, 'bestellingen' => { velden: ['id', 'gebruiker_id', 'bedrag', 'status', 'datum'], transformaties: { # Voorbeeld: status transformatie 'status' => ->(waarde) { waarde.nil? ? 'in_afwachting' : waarde } } } # Voeg meer tabellen toe zoals nodig } def verbind_mysql(config) Mysql2::Client.new( host: config[:host], username: config[:username], password: config[:password], database: config[:database], reconnect: true ) end def migreer_tabel(bron_client, doel_client, tabel_naam, config, logger) logger.info("Start migratie van tabel: #{tabel_naam}") velden = config[:velden] transformaties = config[:transformaties] || {} # Controleer of tabel bestaat in bron begin bron_client.query("SELECT 1 FROM #{tabel_naam} LIMIT 1") rescue Mysql2::Error => e logger.error("Tabel #{tabel_naam} bestaat niet in bron database: #{e.message}") return end # Bereid INSERT statement voor placeholders = velden.map { '?' }.join(', ') insert_sql = "INSERT INTO #{tabel_naam} (#{velden.join(', ')}) VALUES (#{placeholders})" # Haal gegevens op en migreer begin resultaat = bron_client.query("SELECT #{velden.join(', ')} FROM #{tabel_naam}") doel_client.query('START TRANSACTION') resultaat.each do |rij| # Pas transformaties toe waarden = velden.map do |veld| if transformaties[veld] transformaties[veld].call(rij[veld]) else rij[veld] end end doel_client.prepare(insert_sql).execute(*waarden) end doel_client.query('COMMIT') logger.info("Succesvol gemigreerd: #{resultaat.count} rijen naar #{tabel_naam}") rescue Mysql2::Error => e doel_client.query('ROLLBACK') logger.error("Fout tijdens migratie van #{tabel_naam}: #{e.message}") raise end end begin log.info("=== START MIGRATIE PROCES ===") # Maak verbinding met databases bron_client = verbind_mysql(BRON_DB) doel_client = verbind_mysql(DOEL_DB) log.info("Verbonden met bron database: #{BRON_DB[:database]}") log.info("Verbonden met doel database: #{DOEL_DB[:database]}") # Voer migratie uit voor elke tabel TABELLEN_CONFIG.each do |tabel_naam, config| migreer_tabel(bron_client, doel_client, tabel_naam, config, log) end log.info("=== MIGRATIE VOLTOOID ===") rescue Mysql2::Error => e log.fatal("Database fout: #{e.message}") puts "Er is een database fout opgetreden. Zie migratie.log voor details." rescue StandardError => e log.fatal("Onverwachte fout: #{e.message}") puts "Er is een onverwachte fout opgetreden. Zie migratie.log voor details." ensure bron_client&.close doel_client&.close log.info("Database verbindingen gesloten") end ``` **Belangrijke aanpassingen die je moet maken:** 1. **Tabellen en velden aanpassen** in `TABELLEN_CONFIG`: ```ruby TABELLEN_CONFIG = { 'jouw_tabel_naam' => { velden: ['kolom1', 'kolom2', 'kolom3'], # Pas aan naar jouw velden transformaties: { # Voeg transformaties toe zoals nodig 'kolom_naam' => ->(waarde) { ... } } } } ``` 2. **Veelgebruikte transformaties**: ```ruby transformaties: { # Datum conversie 'datum' => ->(waarde) { waarde.strftime('%Y-%m-%d') if waarde }, # Waarde mapping 'status' => ->(waarde) { case waarde when 'actief' then 'active' when 'inactief' then 'inactive' else waarde end }, # Null handling 'telefoon' => ->(waarde) { waarde.nil? ? 'Onbekend' : waarde } } ``` **Het script bevat:** - ✅ **Foutafhandeling** met duidelijke logging - ✅ **Transactionele verwerking** (alle wijzigingen of geen) - ✅ **Gedetailleerde logging** naar `migratie.log` - ✅ **Transformatiemogelijkheden** voor gegevens - ✅ **Automatische verbindingsbeheer** **Voor gebruik:** 1. Installeer de benodigde gem: `gem install mysql2` 2. Pas de database configuratie aan 3. Definieer je tabellen en transformaties in `TABELLEN_CONFIG` 4. Voer uit met: `ruby migratie_script.rb` Het script logt alle activiteiten en fouten zowel naar het console als naar een logbestand voor eenvoudige tracking!