2011-07-01 13 views
14

python Sqlite3 cursor.fetchall() gelen u kaldırma

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

aşağıda gösterildiği gibi

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() 

i diziden u kaldırmak için gereken bir çıkış verir ve

Aşağıda gösterildiği üzere çıkış gerek
['arun', 'kiran', 'kulku', 'sugu'] 

cevap

2

u bu unicode dizeleri olduğunu söyler. sonuç kümesindeki u ile KIRAN için // Örnek ve:

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

düzenleme: Belirtilen formatta küpe listesini yazdırmak için şunu kullanabilirsiniz

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

i güvenli bir method.please olmayan başka neyi şekilde –

+0

güvenli değil verymuch' sizi one.'Thank öneririz sanıyorsun? u ve, imlecin ... – Gryphius

+0

Bu bir soruna neden olur nasıl görmüyorum. lütfen başarısız olduğu bir örneği göster. –

9

u öneki belirtir dizenin bir Unicode dizesi olduğunu. Dizenin temel bir ASCII dizesi olduğundan eminseniz, unicode dizesini basit bir str() ile unicode olmayan bir formata dönüştürebilirsiniz.

Örnek: dizilerini içeren bir liste, bir piton liste anlayışı ile böyle yapmanız gerekecek

Senin durumunda
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 dizilerini listesi fetchall tarafından döndürüldü ve item, tupllerin üyeleridir.

+0

;-) için ben oy veriyorum, her iki durumda tatmin görünüyor KIRAN: 'fetchall' yöntemiyle döndürülen tüm öğeleri dönüştürmek için cevabımı düzenledim. –

+0

@' için açıklama veriniz –

21

Eğer sqlite veritabanından alınan dizeleri set-up, UTF-8 yerine Unicode olarak iade edilmesi gerekiyorsa buna göre text_factory propery kullanarak bağlantısı:

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() 

Ayrıntılar için bu bakınız: http://docs.python.org/library/sqlite3.html#sqlite3.Connection.text_factory senin dizeleri önünde "u" ilgilenir

. Daha sonra bir listeye dizilerini listenizi dönüştürmek gerekir:

ar=[r[0] for r in cur.fetchall()]