diff options
author | Gerhard Häring <gh@ghaering.de> | 2006-05-01 15:14:48 (GMT) |
---|---|---|
committer | Gerhard Häring <gh@ghaering.de> | 2006-05-01 15:14:48 (GMT) |
commit | 82560ebb8d2472be5a916a6013deff89781b452d (patch) | |
tree | 9c45300b8f53df02cc1ae84c18e11db7fd264d97 /Doc/lib/sqlite3/text_factory.py | |
parent | e3c958c33badaff340ee8dcf2c5f64aaa87ffda4 (diff) | |
download | cpython-82560ebb8d2472be5a916a6013deff89781b452d.zip cpython-82560ebb8d2472be5a916a6013deff89781b452d.tar.gz cpython-82560ebb8d2472be5a916a6013deff89781b452d.tar.bz2 |
Further integration of the documentation for the sqlite3 module. There's still
quite some content to move over from the pysqlite manual, but it's a start now.
Diffstat (limited to 'Doc/lib/sqlite3/text_factory.py')
-rw-r--r-- | Doc/lib/sqlite3/text_factory.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/Doc/lib/sqlite3/text_factory.py b/Doc/lib/sqlite3/text_factory.py new file mode 100644 index 0000000..cf2ae92 --- /dev/null +++ b/Doc/lib/sqlite3/text_factory.py @@ -0,0 +1,43 @@ +import sqlite3 + +con = sqlite3.connect(":memory:") +cur = con.cursor() + +# Create the table +con.execute("create table person(lastname, firstname)") + +AUSTRIA = u"\xd6sterreich" + +# by default, rows are returned as Unicode +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert row[0] == AUSTRIA + +# but we can make pysqlite always return bytestrings ... +con.text_factory = str +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert type(row[0]) == str +# the bytestrings will be encoded in UTF-8, unless you stored garbage in the +# database ... +assert row[0] == AUSTRIA.encode("utf-8") + +# we can also implement a custom text_factory ... +# here we implement one that will ignore Unicode characters that cannot be +# decoded from UTF-8 +con.text_factory = lambda x: unicode(x, "utf-8", "ignore") +cur.execute("select ?", ("this is latin1 and would normally create errors" + u"\xe4\xf6\xfc".encode("latin1"),)) +row = cur.fetchone() +assert type(row[0]) == unicode + +# pysqlite offers a builtin optimized text_factory that will return bytestring +# objects, if the data is in ASCII only, and otherwise return unicode objects +con.text_factory = sqlite3.OptimizedUnicode +cur.execute("select ?", (AUSTRIA,)) +row = cur.fetchone() +assert type(row[0]) == unicode + +cur.execute("select ?", ("Germany",)) +row = cur.fetchone() +assert type(row[0]) == str + |