3 votes

pyparsing : obtenir des résultats à partir de données analysées

J'essaie d'analyser des SQL déclarations ( CREATE TABLE exactement) en utilisant pyparsing . Pour le nom de la base de données et la table, j'ai créé des identifiants :

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

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

J'utilise également cette méthode d'analyse syntaxique :

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

Pour l'entrée suivante :

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

J'ai compris :

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

Pourquoi sont-ils différents ? Comment puis-je obtenir la sortie de la première manière, sous forme de listes simples ? Je ne l'obtiens que lorsque j'imprime ces valeurs.

1voto

J.F. Sebastian Points 102961

Il y a une différence entre print a, b y print (a,b) :

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

print a, b imprime deux objets a y b . print (a, b) imprime un seul objet le tuple 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')

Ou pour le dire autrement :

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

__str__ est appelée lorsque vous faites str(obj) . S'il n'y a pas de __str__ méthode alors __repr__ est appelée repr(obj) .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X