2011-07-01 2 views
14

파이썬 sqlite3를 cursor.fetchall()에서 유를 제거하는 방법

[(u'arun',), (u'kiran',), (u'kulku',), (u'sugu',)] 

아래와 같이

import sqlite3 
class class1: 
def __init__(self): 
    self.print1() 
def print1(self): 
    con = sqlite3.connect('mydb.sqlite') 
    cur = con.cursor() 
    cur.execute("select fname from tblsample1 order by fname") 
    ar=cur.fetchall() 
    print(ar) 

class1() 

나가 어레이에서 U 제거해야 할 출력을 제공하고

아래와 같이 전 출력 필요
['arun', 'kiran', 'kulku', 'sugu'] 

답변

2

이 코드는 유니 코드 문자열임을 알려줍니다. 결과 집합에, U와 KIRAN 위해 // 예와 :

>>> myformat="['%s']"%"', '".join([t[0] for t in ar]) 
>>> print myformat 
['arun', 'kiran', 'kulku', 'sugu'] 

편집 : 사용자가 지정한 형식으로 튜플의 목록을 인쇄 할 수는 사용할 수

>>> ar=[(u'u',), (u'u',), (u',,,u,,u,',)] 
>>> myformat="['%s']"%"', '".join([t[0] for t in ar]) 
>>> print myformat 
['u', 'u', ',,,u,,u,'] 
+0

내가 그것을 안전한 method.please 아닌 다른 어떤 방법으로 –

+0

안전하지 verymuch'을 one.'Thank 제안 생각? – Gryphius

+0

u와 커서에서 발생하는 경우 ... –

9

u 접두사를 나타냅니다 문자열은 Unicode 문자열입니다. 문자열이 기본 ASCII 문자열이라면 유니 코드 문자열을 단순한 str()이 아닌 비 유니 코드 문자열로 변환 할 수 있습니다.

예 : 튜플의 목록과 함께, 당신은 파이썬 지능형리스트와 같은을해야 할 것이다

귀하의 경우에는
unicode_foo = u"foo" 
print unicode_foo 
>>> u"foo" 

print str(unicode_foo) 
>>> "foo" 

는 :

ar = [[str(item) for item in results] for results in cur.fetchall()] 

results는 튜플의 목록입니다 fetchall에 의해 반환되고 item은 튜플의 멤버입니다.

+0

cur.fetchall()의 항목에 대해'ar = [str (item [0])에 대한 설명을주세요. '__thank you__ –

+0

@ KILLAN :'fetchall' 메쏘드에 의해 반환 된 모든 항목을 변환하기 위해 제 대답을 편집했습니다. –

21

당신이 당신의 SQLite 데이터베이스에서 검색 문자열을 설정, UTF-8 대신 유니 코드로 반환하는 것이 필요한 경우 그에 따라 text_factory 때에 프로퍼티 사용하여 연결 :

import sqlite3 
class class1: 
def __init__(self): 
    self.print1() 
def print1(self): 
    con = sqlite3.connect('mydb.sqlite') 
    con.text_factory = str 
    cur = con.cursor() 
    cur.execute("select fname from tblsample1 order by fname") 
    ar=cur.fetchall() 
    print(ar) 

class1() 

이 내용은이를 참조하십시오 http://docs.python.org/library/sqlite3.html#sqlite3.Connection.text_factory

문자열 앞의 "u"를 처리합니다. 그런 다음 목록에 튜플의 목록을 변환해야합니다 :

ar=[r[0] for r in cur.fetchall()] 
관련 문제