Guest User

PayPal CSV Error UTF8

a guest
Feb 8th, 2014
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.12 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf8 -*-
  3.  
  4. import csv
  5. import codecs
  6. import time
  7.  
  8. from sqlite3 import dbapi2 as sqlite
  9.  
  10. #.decode('latin')
  11. #.decoden('utf8')
  12.  
  13. def readPayPalCSV():
  14.     with codecs.open('./Data/Herunterladen_utf8.csv', 'rb') as csvfile:
  15.         csvReader = csv.DictReader(csvfile, delimiter=",")
  16.         header = [c for c in csvReader.fieldnames if c.strip()]
  17.         csvcontent = []
  18.         for c in csvReader:
  19.             newdict = {}
  20.             for h in header:
  21.                 newdict[h.strip()] = c[h]
  22.             csvcontent.append(newdict)
  23.         print "\n PayPal Liste\n%s Einträge" % len(csvcontent)
  24.         return csvcontent
  25. paypal_dict_list = readPayPalCSV()
  26.  
  27. #connect to db
  28. con = sqlite.connect("Data/database_test")
  29. cur = con.cursor()
  30.  
  31. #del db and create new db
  32. def create_db():
  33.         #paypal
  34.         cur.execute(u'''drop table if exists paypal_complete''')
  35.         cur.execute(u'''create table if not exists paypal_complete ([Datum] text, [Zeit] text,  [Zeitzone] text, [Name] text, [Art] text, [Status] text, [Währung] text, [Brutto] text, [Gebühr] text, [Netto] text, [Von E-Mail-Adresse] text, [An E-Mail-Adresse] text, [Transaktionscode] text PRIMARY KEY, [Status der Gegenpartei] text, [Adressstatus] text, [Verwendungszweck] text, [Artikelnummer] text, [Betrag für Versandkosten] text, [Versicherungsbetrag] text, [Umsatzsteuer] text, [Option 1 - Name] text, [Option 1 - Wert] text, [Option 2 - Name] text, [Option 2 - Wert] text, [Auktions-Site] text, [Käufer-ID] text, [Artikel-URL] text, [Angebotsende] text, [Vorgangs-Nr.] text, [Rechnungs-Nr.] text, [Txn-Referenzkennung] text, [Rechnungsnummer] text, [Individuelle Nummer] text, [Bestätigungsnummer] text, [Guthaben] text, [Adresse] text, [Zusätzliche Angaben] text, [Ort] text, [Staat/Provinz/Region/Landkreis/Territorium/Präfektur/Republik] text, [PLZ] text, [Land] text, [Telefonnummer der Kontaktperson] text)''')
  36. create_db()
  37.  
  38. def print_header(tabelle):
  39.     print "\n header for", tabelle
  40.     cur.execute("PRAGMA table_info("+tabelle+")")
  41.     print cur.fetchall()
  42. print_header("paypal_complete")
  43.  
  44. def insertDict(curs, tablename, data_list):
  45.     for data in data_list:
  46.         fields = ['[' + k + ']' for k in data.keys()]
  47.         values = ['[' + v + ']' for v in data.values()]
  48.         placeholder = "?"
  49.         fieldlist = ",".join(fields)
  50.         placeholderlist = ",".join([placeholder] * len(fields))
  51.         query = "insert into %s(%s) values (%s)" % (tablename, fieldlist, placeholderlist)
  52.         print "query"
  53.         print query
  54.         curs.execute(query, values)
  55. insertDict(cur, "paypal_complete", paypal_dict_list)
  56.  
  57. #show first db entries
  58. def print_lines(db, count=5):
  59.     print "\n", db
  60.     cur.execute('select * from '+db)
  61.     for n, a in enumerate(cur):
  62.         if n == count:
  63.             break
  64.         else:
  65.             print a
  66. print_lines("paypal_complete")
  67.  
  68. #close connection
  69. con.commit()
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. #RESULT
  79.  
  80.  header for paypal_complete
  81. [(0, u'Datum', u'text', 0, None, 0), (1, u'Zeit', u'text', 0, None, 0), (2, u'Zeitzone', u'text', 0, None, 0), (3, u'Name', u'text', 0, None, 0), (4, u'Art', u'text', 0, None, 0), (5, u'Status', u'text', 0, None, 0), (6, u'W\xe4hrung', u'text', 0, None, 0), (7, u'Brutto', u'text', 0, None, 0), (8, u'Geb\xfchr', u'text', 0, None, 0), (9, u'Netto', u'text', 0, None, 0), (10, u'Von E-Mail-Adresse', u'text', 0, None, 0), (11, u'An E-Mail-Adresse', u'text', 0, None, 0), (12, u'Transaktionscode', u'text', 0, None, 1), (13, u'Status der Gegenpartei', u'text', 0, None, 0), (14, u'Adressstatus', u'text', 0, None, 0), (15, u'Verwendungszweck', u'text', 0, None, 0), (16, u'Artikelnummer', u'text', 0, None, 0), (17, u'Betrag f\xfcr Versandkosten', u'text', 0, None, 0), (18, u'Versicherungsbetrag', u'text', 0, None, 0), (19, u'Umsatzsteuer', u'text', 0, None, 0), (20, u'Option 1 - Name', u'text', 0, None, 0), (21, u'Option 1 - Wert', u'text', 0, None, 0), (22, u'Option 2 - Name', u'text', 0, None, 0), (23, u'Option 2 - Wert', u'text', 0, None, 0), (24, u'Auktions-Site', u'text', 0, None, 0), (25, u'K\xe4ufer-ID', u'text', 0, None, 0), (26, u'Artikel-URL', u'text', 0, None, 0), (27, u'Angebotsende', u'text', 0, None, 0), (28, u'Vorgangs-Nr.', u'text', 0, None, 0), (29, u'Rechnungs-Nr.', u'text', 0, None, 0), (30, u'Txn-Referenzkennung', u'text', 0, None, 0), (31, u'Rechnungsnummer', u'text', 0, None, 0), (32, u'Individuelle Nummer', u'text', 0, None, 0), (33, u'Best\xe4tigungsnummer', u'text', 0, None, 0), (34, u'Guthaben', u'text', 0, None, 0), (35, u'Adresse', u'text', 0, None, 0), (36, u'Zus\xe4tzliche Angaben', u'text', 0, None, 0), (37, u'Ort', u'text', 0, None, 0), (38, u'Staat/Provinz/Region/Landkreis/Territorium/Pr\xe4fektur/Republik', u'text', 0, None, 0), (39, u'PLZ', u'text', 0, None, 0), (40, u'Land', u'text', 0, None, 0), (41, u'Telefonnummer der Kontaktperson', u'text', 0, None, 0)]
  82.  
  83. query
  84. insert into paypal_complete([Transaktionscode],[Von E-Mail-Adresse],[Staat/Provinz/Region/Landkreis/Territorium/Präfektur/Republik],[Option 1 - Name],[Käufer-ID],[An E-Mail-Adresse],[Txn-Referenzkennung],[Status],[Option 2 - Wert],[Status der Gegenpartei],[Vorgangs-Nr.],[Option 1 - Wert],[Verwendungszweck],[Ort],[Adresse],[Option 2 - Name],[Guthaben],[Versicherungsbetrag],[Betrag für Versandkosten],[Artikel-URL],[Land],[Zeitzone],[Auktions-Site],[Angebotsende],[Name],[Zeit],[Adressstatus],[Gebühr],[Netto],[Währung],[Rechnungsnummer],[Artikelnummer],[Brutto],[Individuelle Nummer],[Art],[Zusätzliche Angaben],[Telefonnummer der Kontaktperson],[Bestätigungsnummer],[Umsatzsteuer],[Datum],[PLZ],[Rechnungs-Nr.]) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
  85. Traceback (most recent call last):
  86.   File "import_pp2db.py", line 55, in <module>
  87.     insertDict(cur, "paypal_complete", paypal_dict_list)
  88.   File "import_pp2db.py", line 54, in insertDict
  89.     curs.execute(query, values)
  90. sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
Add Comment
Please, Sign In to add comment