On Dec 5, 8:00 am, Michael Bayer <[EMAIL PROTECTED]> wrote: > he needs to supply data to the DB as python unicode objects..the > strings from the file should be decoded first from ISO-8859.
Thanks for the help. After some experimentation I found that encoding all string data to UTF-8, ignoring errors, did the trick: s = unicode(s, "utf-8", "ignore") In case anybody is curious, here are tests to demonstrate my problem and some solutions. N.B. UTF-8/replace worked in these tests, but not in my SQLElixir application. ---- import unittest, sqlite3 class TestCase(unittest.TestCase): def setUp(self): self.conn = sqlite3.connect(":memory:") self.conn.cursor().execute('CREATE TABLE demo (value TEXT)') def insertAndDump(self, encoding, errors, expectFailure=False): caseName = repr([encoding, errors]) data = 'K\xf6 1366' try: if encoding is not None: data = unicode(data, encoding=encoding, errors=errors) cursor = self.conn.cursor() cursor.execute("INSERT INTO demo (value) VALUES (?)", [data]) cursor.execute('SELECT * FROM demo') self.failUnless(len(cursor.fetchall()) == 1) self.failIf(expectFailure, "Unexpected success for %s" % caseName) except Exception, info: self.failUnless(expectFailure, "Failed %s: %s" % (caseName, info)) def testCannotRetrieveUnencoded(self): self.insertAndDump(None, None, True) def testCannotEncodeStrict(self): self.insertAndDump("utf-8", "strict", True) def testCanRetrieve8859Strict(self): self.insertAndDump("8859", "strict") def testCanRetrieveUTF8Ignored(self): self.insertAndDump("utf-8", "ignore") def testCanRetrieveUTF8Replaced(self): self.insertAndDump("utf-8", "replace") unittest.main() --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---