[Tutor] sqlite3 select extra characters

Lang Hurst lang at tharin.com
Sat Jun 19 03:08:40 CEST 2010


Steven D'Aprano wrote:
> On Fri, 18 Jun 2010 03:54:05 pm Lang Hurst wrote:
>   
>> Is there a way to just return the values when using sqlite3?
>>
>> If I:
>>
>>     names = c.execute('select names from students')
>>     for name in names: print names
>>     
>
> What is c? A Cursor or a Connection object? It probably doesn't make any 
> real difference, but it could, and so you should say.
>
>
>   
I'm doing my best.  c was a cursor.  Perhaps not the best naming convention.

[snip]
> I doubt it. Did you mean this?
>
> (u'Cleese, John',)
>
> Note the comma at the end. A subtle difference, but a HUGE one. 
> Punctuation is important: it's what makes the difference between:
>
>   
Yup, you're right.

> In Python, the comma makes it a tuple, rather than a meaningless pair of 
> parentheses.
>
>
>
>   
>> is there a way to just return
>>
>> Cleese, John
>> Jones, Terry
>> Gillaim, Terry
>>     
>
> No, because you're not *returning* anything, you're *printing*, and 
> printing a tuple prints the opening and closing brackets plus the 
> repr() of each internal object.
>
>   

I guess I should have been more clear.  By return, I suppose I meant 
assign.  I'm trying to pull the names from rows of data and append each 
name to a ListStore, for entry completion.

I was using "print" just to show what I was hoping to get into the 
ListStore, and at that point, I was only getting the tuple, not the object.


> This is fundamental stuff: objects are not their printable 
> representation, any more than you are a photo of you.
>
> What is printed is not the same as the object itself. Every object has 
> its own printable representation. In some cases it looks exactly the 
> same as the way you enter the object as a literal:
>
>   
[snip]

> In this case, the object returned by execute is a list of tuples. If 
> there is only a single object in each tuple, it is still a tuple, and 
> it still prints as a tuple. If you want to print something other than a 
> tuple, don't print the tuple:
>
> names = c.execute('select names from students')
> for t in names:
>     name = t[0]  # Extract the first item from each tuple.
>     print name
>
> Of course you can combine the two lines inside the loop:
>
>     print t[0]
>   

OK.


>> It seems a shame to have to run the answers through a stip process.
>>     
>
> It would be more of a shame if execute sometimes returned a list of 
> tuples, and sometimes a list of other objects, with no easy way before 
> hand of knowing what it would return.
>
>   
Actually, I know you were being facetious, but with my skills so poor, 
often that seems like what is happening.  I'm killing myself right now 
trying to troubleshoot glade, python and entrycompletion.  I know it 
will soon be as clear as a tuple vs an object; I just hope that 
transition happens soon.  Thanks again for walking me through the 
terminology, it is appreciated.


-- 
There are no stupid questions, just stupid people.



More information about the Tutor mailing list