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.