Re: sqlite3 adaptors mystery

2008-03-02 Thread Mel
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

2008-03-02 Thread Matej Cepl
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

2008-03-02 Thread Matej Cepl
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

2008-03-01 Thread Mel
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