2016-11-30 4 views
2

私は以下のような文字列を取り、最初のパラメータ(id)を取り出して、それを印刷するために使用したいと考えています。私はPythonの分割を検討してきましたが、通常は何かを得る前に2〜3回分割する必要があります。ここでPythonでsqlクエリを解析する

は、私が解析しようとしている文字列の例です:

EntryError(u"(sqlite3.IntegrityError) UNIQUE constraint failed: 
role.name, role.domain_id [SQL: u'INSERT INTO table1 (id, name, 
domain_id, extra) VALUES (?, ?, ?, ?)'] [parameters: ('id', 
'fake1name', '<<null>>', '{}')]",) 

私のような事をしようとしています

e = e.split("\'") 
e = e.split(",") 

しかし、これは私に、さらに解析する必要があり奇妙な文字列を与えます。 id"[parameters: ('id', 'fake1name', '<<null>>', '{}')]"から引き出す簡単な方法はありますか?

は、ここで私が持っているコードです:

except exception.EntryError as e: 

    query = str(e) 
    # example of me using split to try and reduce the string 
    parsedstr = query.split("[") 
    parsedstr = parsedstr.split("\'") 

    # This will give me id like I want but it doesn't seem efficient 
    # prints: id 
    print parsedstr[1] 
+2

残りのコードを表示できますか?カーソルまたは例外インスタンス自体に実際にアクセスできますか?ありがとう。 – alecxe

+0

@alecxeが追加されました: – ayonpyth

+0

どの文字列を解析しようとしていますか?上のEntryErrorオブジェクトのメッセージを実際に解析しようとしていますか? –

答えて

1

あなたは正規表現を使用することができます。

import re 

... 

except exception.EntryError as e: 
    print re.search("\[parameters: \('([^']+)", str(e)).group(1) 

これは[parameters: ('の最初の出現のための例外の文字列を検索し、それが'に当たるまで、その時点からマッチング開始します。