Я пытаюсь создать список значений столбцов и типов объявлений в Python на основе этой строки, которая является запросом на создание SQL:
creation_sql = '''CREATE TABLE "objects_users" (
"id" serial NOT NULL PRIMARY KEY,
"clientID" integer NOT NULL,
"email" varchar(100) NOT NULL,
"first_name" varchar(100) NOT NULL,
"last_name" varchar(100) NOT NULL,
"phone" varchar(100) NOT NULL,
"password" varchar(100) NOT NULL,
"type" varchar(100) NOT NULL,
"date_created" timestamp with time zone NOT NULL,
"active" varchar(100) NOT NULL);'''
Я уже проанализировал значения в кавычках из выражениявот так:
def parse(creation_query):
quoted_values = re.compile('"[^"]*"')
values = quoted_values.findall(creation_sql)
column_names = []
for value in values:
column_names.append(value)
table_name = column_names[0]
column_names = [names.replace('"','') for names in column_names]
del column_names[0] # this will be table name
print(table_name)
print(column_names)
Как мне разобрать значения типа SQL из каждой строки?
Например, я уже собрал id
и clientID
в списке.Теперь я хочу объявление, serial NOT NULL PRIMARY KEY
и integer NOT NULL
, и т.д ... в списке.
Как я могу выполнить этот тип анализа?Я бы лучше сказал, но я могу понять это самостоятельно, мне просто нужно регулярное выражение
Обновление
Вот обновленный код, который предоставляет мне словарь всегоМне нужно на основе утверждения creation_sql:
import re
creation_sql = '''CREATE TABLE "objects_users" (
"id" serial NOT NULL PRIMARY KEY,
"clientID" integer NOT NULL,
"email" varchar(100) NOT NULL,
"first_name" varchar(100) NOT NULL,
"last_name" varchar(100) NOT NULL,
"phone" varchar(100) NOT NULL,
"password" varchar(100) NOT NULL,
"type" varchar(100) NOT NULL,
"date_created" timestamp with time zone NOT NULL,
"active" varchar(100) NOT NULL);'''
def parse(creation_query):
quoted_values = re.compile('"[^"]*"')
table_name = quoted_values.findall(creation_query)[0]
dictionary_values = dict(re.findall('"(.*?)"\s+(.+)[,)]', creation_query))
dictionary_values['table_name'] = table_name.replace('"','')
return dictionary_values
d = parse(creation_sql)
print(d.get('table_name'))
for key, item in d.items():
if key != 'table_name':
print(key + ":"+ item)