Python pyparsing:从解析的数据中获取结果

Python pyparsing:从解析的数据中获取结果,python,pyparsing,Python,Pyparsing,我正试图使用pyparsing解析一些SQL语句(createtable)。对于数据库名称和表,我创建了标识符: identifier = (Combine(Optional('"') + Word(alphanums) + ZeroOrMore('_' + Word(alphanums)) + Optional('"')) & ~keywords_set) database_name = id

我正试图使用
pyparsing
解析一些
SQL
语句(
createtable
)。对于数据库名称和表,我创建了标识符:

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

database_name = identifier.setResultsName('database_name')
table_name = identifier.setResultsName('table_name')
我也在使用这种解析方法:

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
对于以下输入:

    CreateTableParser().parse('''
CREATE TABLE "django"."django_site1" (
)''')
我得到:

['"django"'] ['"django_site1"']
((['"django"'], {}), (['"django_site1"'], {}))

为什么这些是不同的?如何以第一种方式获得输出,作为简单的列表?我只在打印这些值时才得到它。

打印a、b和打印(a、b)之间有区别:

打印a、b
打印两个对象
a
b
<代码>打印(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')
或者换一种说法:

>>> class A:
...    def __str__(self):
...        return '1'
...    def __repr__(self):
...        return 'A()'
... 
>>> print A(), A()
1 1
>>> print (A(), A())
(A(), A())
当您执行
str(obj)
时,将调用
\uuu str\uuu
方法。如果没有
\uuuu str\uuuu
方法,那么
\uuuu repr\uuuu
方法被称为
repr(obj)

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