2011-07-01 16 views
14

Pythonでsqlite3のcursor.fetchall()からUを削除する方法

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

iは配列からUを削除する必要が出力を与え、

以下のようにiが出力を必要とします
['arun', 'kiran', 'kulku', 'sugu'] 

答えて

2

これらはユニコード文字列であることがわかります。あなたが使用することができ、指定された形式でタプルのリストを印刷します:

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

編集:u接頭辞を示し

>>> 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文字列であることが確かであれば、ユニコード文字列を単純な0​​で非ユニコード文字列に変換できます。

例:お使いの場合には

unicode_foo = u"foo" 
print unicode_foo 
>>> u"foo" 

print str(unicode_foo) 
>>> "foo" 

は、タプルのリストで、あなたはPythonのリスト内包と、このような操作を行う必要があるでしょう:

resultsはタプルのリストである
ar = [[str(item) for item in results] for results in cur.fetchall()] 

fetchallによって返され、itemはタプルのメンバーです。

+0

cur.fetchall()の項目の 'ar = [str(item [0])の説明を教えてください ' __thank you__ –

+0

@ KILLAN: 'fetchall'メソッドによって返されたすべての項目を変換する答えを編集しました。 –

21

あなたはSQLiteデータベースから取得した文字列を設定、UTF-8の代わりに、Unicodeとして返されることが必要な場合はそれに応じてtext_factory propery使用して接続:

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()] 
関連する問題