Parse Foreign Keys
This commit is contained in:
parent
90e08dad2e
commit
ff967a4852
@ -10,6 +10,7 @@ def main():
|
|||||||
sql_tables = SQLParser.parse_sql_file("schema.sql")
|
sql_tables = SQLParser.parse_sql_file("schema.sql")
|
||||||
inserts = []
|
inserts = []
|
||||||
for table in sql_tables:
|
for table in sql_tables:
|
||||||
|
print(table.foreign_keys)
|
||||||
for i in range(0, 5):
|
for i in range(0, 5):
|
||||||
inserts.append(SQLGenerator.generate_random_insert(table))
|
inserts.append(SQLGenerator.generate_random_insert(table))
|
||||||
|
|
||||||
|
@ -8,3 +8,20 @@ CREATE TABLE `test` (
|
|||||||
`ending_date_time` datetime(6) DEFAULT NULL,
|
`ending_date_time` datetime(6) DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`)
|
PRIMARY KEY (`id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||||||
|
|
||||||
|
CREATE TABLE `tasks` (
|
||||||
|
`taskid` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||||
|
`deadline` date DEFAULT NULL,
|
||||||
|
`eta` int(11) NOT NULL,
|
||||||
|
`start_date` date DEFAULT NULL,
|
||||||
|
`task_name` varchar(255) DEFAULT NULL,
|
||||||
|
`work_time` int(11) NOT NULL,
|
||||||
|
`parent` bigint(20) DEFAULT NULL,
|
||||||
|
`taskgroup_id` bigint(20) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`taskid`),
|
||||||
|
KEY `FKamiednrmm0puy94sf1o3q84bp` (`parent`),
|
||||||
|
KEY `FKk2et8snwh68sf7p6n6ltmk638` (`taskgroup_id`),
|
||||||
|
CONSTRAINT `FKamiednrmm0puy94sf1o3q84bp` FOREIGN KEY (`parent`) REFERENCES `tasks` (`taskid`),
|
||||||
|
CONSTRAINT `FKk2et8snwh68sf7p6n6ltmk638` FOREIGN KEY (`taskgroup_id`) REFERENCES `taskgroups` (`taskgroupid`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||||||
|
|
||||||
|
@ -40,13 +40,21 @@ def process_table_content(table_content: str, table_name: str):
|
|||||||
splitted_table_content = table_content.split(",")
|
splitted_table_content = table_content.split(",")
|
||||||
primary_key = ""
|
primary_key = ""
|
||||||
columns = []
|
columns = []
|
||||||
|
foreign_keys = []
|
||||||
for column_definition in splitted_table_content:
|
for column_definition in splitted_table_content:
|
||||||
if column_definition.startswith(" PRIMARY KEY"):
|
if column_definition.startswith(" PRIMARY KEY"):
|
||||||
primary_key = get_primary_key(column_definition)
|
primary_key = get_primary_key(column_definition)
|
||||||
|
elif column_definition.startswith(" KEY"):
|
||||||
|
pass
|
||||||
|
elif column_definition.startswith(" CONSTRAINT"):
|
||||||
|
foreign_key_definition = column_definition[column_definition.index("FOREIGN KEY"):len(column_definition):1]
|
||||||
|
match = re.search("FOREIGN KEY \(`(\w+)`\)", foreign_key_definition)
|
||||||
|
if match:
|
||||||
|
foreign_keys.append(match.group(1))
|
||||||
else:
|
else:
|
||||||
column = parse_column_definition(column_definition)
|
column = parse_column_definition(column_definition)
|
||||||
columns.append(column)
|
columns.append(column)
|
||||||
table = SQLTable(table_name, columns, primary_key)
|
table = SQLTable(table_name, columns, primary_key, foreign_keys)
|
||||||
return table
|
return table
|
||||||
|
|
||||||
|
|
||||||
@ -78,6 +86,7 @@ def get_column_type(column_definition: str):
|
|||||||
return SQLColumn.SQLColumnType.DATETIME
|
return SQLColumn.SQLColumnType.DATETIME
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_column_name(column_definition: str):
|
def get_column_name(column_definition: str):
|
||||||
match = re.search("`(\w+)`", column_definition)
|
match = re.search("`(\w+)`", column_definition)
|
||||||
if match:
|
if match:
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
from typing import List
|
||||||
|
|
||||||
from sqlparse.SQLColumn import SQLColumn
|
from sqlparse.SQLColumn import SQLColumn
|
||||||
|
|
||||||
|
|
||||||
class SQLTable:
|
class SQLTable:
|
||||||
def __init__(self, table_name, columns: [SQLColumn], primary_key: str):
|
def __init__(self, table_name, columns: List[SQLColumn], primary_key: str, foreign_keys: List[str]):
|
||||||
self.table_name = table_name
|
self.table_name = table_name
|
||||||
self.columns = columns
|
self.columns = columns
|
||||||
self.primary_key = primary_key
|
self.primary_key = primary_key
|
||||||
|
self.foreign_keys = foreign_keys
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user