2010-12-24 17 views
3

SQL文(CREATE TABLE正確に)をpyparsingを使って解析しようとしています。以下の入力の場合pyparsing:解析されたデータから結果を得る

def parse(self, sql): 
    try: 
     tokens = self.create_table_stmt.parseString(sql) 
     print tokens.database_name, tokens.table_name 
     values = tokens.database_name, tokens.table_name 
     print values 
     return values 
    except ParseException as error: 
     print error 

::私も、この解析方法を使用しています

identifier = (Combine(Optional('"') + Word(alphanums) + 
         ZeroOrMore('_' + Word(alphanums)) + 
         Optional('"')) & ~keywords_set) 

database_name = identifier.setResultsName('database_name') 
table_name = identifier.setResultsName('table_name') 

:私は取得

CreateTableParser().parse(''' 
CREATE TABLE "django"."django_site1" (
)''') 

両方のデータベース名とテーブルテーブルのために私は、識別子を作成しています
['"django"'] ['"django_site1"'] 
((['"django"'], {}), (['"django_site1"'], {})) 

これはなぜですか違う?単純なリストのように最初の方法で出力を得るにはどうすればよいですか?私はそれらの値を印刷するときにしか得られません。

>>> a, b = "ab" 
>>> a 
'a' 
>>> b 
'b' 
>>> print a, b 
a b 
>>> print (a, b) 
('a', 'b') 

print a, bプリントオブジェクトab

答えて

1

print a, bprint (a,b)の違いがあります。 print (a, b)プリント単一のオブジェクトのタプルa, b

>>> w = sys.stdout.write 
>>> _ = w(str(a)), w(' '), w(str(b)), w('\n') 
a b 
>>> _ = w(str((a,b))), w('\n') 
('a', 'b') 

それとも別の言い方をする:あなたがstr(obj)を行う際

>>> class A: 
... def __str__(self): 
...  return '1' 
... def __repr__(self): 
...  return 'A()' 
... 
>>> print A(), A() 
1 1 
>>> print (A(), A()) 
(A(), A()) 

__str__メソッドが呼び出されます。 __str__メソッドが存在しない場合、__repr__メソッドはrepr(obj)と呼ばれます。

関連する問題