Re: sqlite3 adaptors mystery
Matej Cepl wrote: > Thanks for your help, but plain-text strings is not what > I wanted. The boolean variables was what I was after. See this > modified version of the script: > > #!/usr/bin/python > import sqlite3 > def adapt_boolean(bol): > if bol: > return "True" > else: > return "False" > > def convert_boolean(bolStr): > if str(bolStr) == "True": > return bool(True) > elif str(bolStr) == "False": > return bool(False) > else: > raise ValueError, "Unknown value of bool attribute > '%s'" % bolStr > > sqlite3.register_adapter(bool,adapt_boolean) > sqlite3.register_converter("boolean",convert_boolean) > > db = sqlite3.connect(":memory:") > cur=db.cursor() > cur.execute("create table test(p boolean)") > p=False > cur.execute("insert into test(p) values (?)", (p,)) > p=True > cur.execute("insert into test(p) values (?)", (p,)) > cur.execute("select p from test") > for (field,) in cur.fetchall(): > print field,type(field) > > The output here is: > > [EMAIL PROTECTED] dumpBugzilla]$ python testAdaptors.py False 'unicode'> > True > [EMAIL PROTECTED] dumpBugzilla]$ > > I thought that converter is there for just exactly this -- that > I would get back bool values not strings. > > Sorry for not being clear in the first run. Sorry about the misunderstanding. It seems you want db = sqlite3.connect("test.db", detect_types=sqlite3.PARSE_DECLTYPES) After this, the print shows False True Mel. -- http://mail.python.org/mailman/listinfo/python-list
Re: sqlite3 adaptors mystery
On 2008-03-02, 08:16 GMT, Matej Cepl wrote: > Thanks for your help, but plain-text strings is not what > I wanted. The boolean variables was what I was after. See this > modified version of the script: OK, I got it -- I was missing detect_types parameter of the connect method. Matěj -- http://mail.python.org/mailman/listinfo/python-list
Re: sqlite3 adaptors mystery
On 2008-03-01, 23:41 GMT, Mel wrote: > There's nothing much wrong. cur.fetchall is returning a list > of all the selected rows, and each row is a tuple of fields. > Each tuple is being converted for display by repr, so the > strings are shown as unicode, which is what they are > internally. Change the print to > > for (field,) in cur.fetchall(): > print field > > and you'll see your plain-text strings. Thanks for your help, but plain-text strings is not what I wanted. The boolean variables was what I was after. See this modified version of the script: #!/usr/bin/python import sqlite3 def adapt_boolean(bol): if bol: return "True" else: return "False" def convert_boolean(bolStr): if str(bolStr) == "True": return bool(True) elif str(bolStr) == "False": return bool(False) else: raise ValueError, "Unknown value of bool attribute '%s'" % bolStr sqlite3.register_adapter(bool,adapt_boolean) sqlite3.register_converter("boolean",convert_boolean) db = sqlite3.connect(":memory:") cur=db.cursor() cur.execute("create table test(p boolean)") p=False cur.execute("insert into test(p) values (?)", (p,)) p=True cur.execute("insert into test(p) values (?)", (p,)) cur.execute("select p from test") for (field,) in cur.fetchall(): print field,type(field) The output here is: [EMAIL PROTECTED] dumpBugzilla]$ python testAdaptors.py False True [EMAIL PROTECTED] dumpBugzilla]$ I thought that converter is there for just exactly this -- that I would get back bool values not strings. Sorry for not being clear in the first run. Matej -- http://mail.python.org/mailman/listinfo/python-list
Re: sqlite3 adaptors mystery
Matej Cepl wrote: [ ... ] > However, when running this program it seems converter doesn’t seem to work, > because I get: > > [EMAIL PROTECTED] dumpBugzilla]$ rm test.db ; python testAdaptors.py > [(u'False',), (u'True',)] > [EMAIL PROTECTED] dumpBugzilla]$ > > There is probably something quite obvious what I do incorrectly, but I just > don't see it. Could somebody kick me in the right direction, please? There's nothing much wrong. cur.fetchall is returning a list of all the selected rows, and each row is a tuple of fields. Each tuple is being converted for display by repr, so the strings are shown as unicode, which is what they are internally. Change the print to for (field,) in cur.fetchall(): print field and you'll see your plain-text strings. Mel. -- http://mail.python.org/mailman/listinfo/python-list