commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnue-contrib] r270 - in address: . db-migration


From: johannes
Subject: [gnue-contrib] r270 - in address: . db-migration
Date: Thu, 19 Apr 2007 09:52:05 -0500 (CDT)

Author: johannes
Date: 2007-04-19 09:52:05 -0500 (Thu, 19 Apr 2007)
New Revision: 270

Added:
   address/db-migration/
   address/db-migration/align-csv.py
   address/db-migration/dumps.sh
   address/db-migration/imp-csv.py
Log:
Added migration script for database (mdb to sqlite3)


Added: address/db-migration/align-csv.py
===================================================================
--- address/db-migration/align-csv.py   2007-04-10 14:25:24 UTC (rev 269)
+++ address/db-migration/align-csv.py   2007-04-19 14:52:05 UTC (rev 270)
@@ -0,0 +1,35 @@
+#!/usr/bin/python
+# -*- encoding: utf-8 -*-
+
+import sys
+
+marker = '<<###EOR###>>'
+
+header = None
+last_line = ''
+rows = []
+
+for line in sys.stdin.readlines():
+    if header is None:
+        header = line.strip()
+        line = ''
+
+    if marker in line:
+        (lead, rest) = line.split(marker, 1)
+        last_line += lead
+        rows.append(last_line)
+
+        while marker in rest:
+            (komp, rest) = rest.split(marker, 1)
+            rows.append(komp)
+
+        last_line = rest
+    else:
+        last_line += line
+
+print header
+for ix, zeile in enumerate(rows):
+    text = zeile.replace('\r\n', '<NEWLINE>')
+    text = text.replace('\n', '<NEWLINE>')
+    text = text.replace('\r', '<NEWLINE>')
+    print text


Property changes on: address/db-migration/align-csv.py
___________________________________________________________________
Name: svn:executable
   + *

Added: address/db-migration/dumps.sh
===================================================================
--- address/db-migration/dumps.sh       2007-04-10 14:25:24 UTC (rev 269)
+++ address/db-migration/dumps.sh       2007-04-19 14:52:05 UTC (rev 270)
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+dbname=promo.mdb
+EOR='<<###EOR###>>'
+
+echo "Anrede ..."
+mdb-export -R$EOR $dbname Tab_Anrede | ./align-csv.py > anrede.csv
+echo "Kategorie ..."
+mdb-export -R$EOR $dbname Tab_Kategorie | ./align-csv.py > kategorie.csv
+echo "Ansprechpartner ..."
+mdb-export -R$EOR $dbname Tab_ASP | ./align-csv.py > ansp.csv
+echo "Firma ..."
+mdb-export -R$EOR $dbname Tab_Firma | ./align-csv.py > firma.csv
+
+./imp-csv.py


Property changes on: address/db-migration/dumps.sh
___________________________________________________________________
Name: svn:executable
   + *

Added: address/db-migration/imp-csv.py
===================================================================
--- address/db-migration/imp-csv.py     2007-04-10 14:25:24 UTC (rev 269)
+++ address/db-migration/imp-csv.py     2007-04-19 14:52:05 UTC (rev 270)
@@ -0,0 +1,180 @@
+#!/usr/bin/python
+# -*- encoding: utf-8 -*-
+#
+# Import CSV into SQLite3
+
+import pysqlite2.dbapi2 as dbapi
+import csv
+
+# =============================================================================
+# Clear all rows from a given table
+# =============================================================================
+
+def clear_table(db, table):
+
+    cur = db.cursor()
+    cur.execute('DELETE FROM %s' % table)
+    cur.close()
+
+
+# =============================================================================
+# Import the salutaions
+# =============================================================================
+
+def salutations(db):
+
+    clear_table(db, 'salutation')
+    reader = csv.DictReader(open('anrede.csv'))
+
+    cur = db.cursor()
+
+    result = {}
+    for row in reader:
+        text = unicode(row['Anr1'], 'utf-8')
+        cur.execute('INSERT INTO salutation (text) VALUES (?)', [text])
+        result[text.upper()] = cur.lastrowid
+
+    cur.close()
+    return result
+
+
+# =============================================================================
+# Import the categories
+# =============================================================================
+
+def categories(db):
+
+    clear_table(db, 'category')
+    reader = csv.DictReader(open('kategorie.csv'))
+
+    cur = db.cursor()
+
+    result = {}
+    for row in reader:
+        text = unicode(row['Kategorie'], 'utf-8')
+        cur.execute('INSERT INTO category (text) VALUES (?)', [text])
+        result[text.upper()] = cur.lastrowid
+
+    cur.close()
+
+    return result
+
+
+# =============================================================================
+# Get the ID for a given category
+# =============================================================================
+
+def fetch_lookup(value, lookup):
+
+    result = lookup.get(value.upper())
+    return result
+
+
+# =============================================================================
+# Re-Format a memo text
+# =============================================================================
+
+def fetch_memo(value):
+
+    result = value.replace('<NEWLINE>', '\n')
+    return result
+
+
+# =============================================================================
+# Import companies
+# =============================================================================
+
+def company(db, category):
+
+    clear_table(db, 'company')
+
+    reader = csv.DictReader(open('firma.csv'))
+    cur = db.cursor()
+
+    for row in reader:
+        cmd = 'INSERT INTO company (id, matchcode, name1, name2, street, ' \
+              '    country, zip, city, vatid, compreg, phone, fax, web, ' \
+              '    email, customer, bwcustomer, bwsupplier, shipment, ' \
+              '    category, memo, quicksearch) VALUES (?, ?, ?, ?, ?, ?, ' \
+              '?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
+
+        cur.execute(cmd, [row['ID_Firma'],
+                          row['Matchcode'],
+                          row['Firma 1'],
+                          row['Firma 2'],
+                          row['Straße'],
+                          row['Land'],
+                          row['PLZ'],
+                          row['Stadt'],
+                          row['UID'],
+                          row['FNr'],
+                          row['Tel_Haupt'],
+                          row['Fax_zentr'],
+                          row['INet'],
+                          row['eMail'],
+                          row['unsere_KdNr'],
+                          row['Ihre_KdNr'],
+                          row['Ihre_LieferantenNr'],
+                          row['Versand'],
+                          fetch_lookup(row['Kategorie'], category),
+                          fetch_memo(row['Kund_Info']),
+                          False])
+
+    cur.close()
+
+
+# =============================================================================
+# Import the contacts
+# =============================================================================
+
+def contact(db, salut):
+
+    clear_table(db, 'contact')
+
+    reader = csv.DictReader(open('ansp.csv'))
+    cur = db.cursor()
+
+    for row in reader:
+        cmd = 'INSERT INTO contact (id, company, salutation, title, ' \
+              '    firstname, surname, department, duty, phone1, phone2, ' \
+              '    fax, email, memo) ' \
+              '    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
+
+        cur.execute(cmd, [row['ID_Person'],
+                          row['ID_Firma'],
+                          fetch_lookup(row['Anr'], salut),
+                          row['Titel'],
+                          row['Vorname'],
+                          row['Zuname'],
+                          row['Abt'],
+                          row['Funkt'],
+                          row['Asp_Tel1'],
+                          row['Asp_Tel2'],
+                          row['Fax'],
+                          row['E-Mail'],
+                          fetch_memo(row['Asp_Memo'])])
+
+    cur.close()
+
+
+
+
+# =============================================================================
+# Main program
+# =============================================================================
+
+db = dbapi.connect('address.db')
+
+print "Importing into salutation  ..."
+salut = salutations(db)
+print "Importing into category    ..."
+categ = categories(db)
+print "Importing into company     ..."
+company(db, categ)
+print "Importing into contact     ..."
+contact(db, salut)
+
+print "Committing ..."
+db.commit()
+
+print "Done"


Property changes on: address/db-migration/imp-csv.py
___________________________________________________________________
Name: svn:executable
   + *





reply via email to

[Prev in Thread] Current Thread [Next in Thread]