From 5ba3fad6cc96e2aebca473392eb87dfe5a53f987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20B=C3=B6ckelmann?= Date: Wed, 17 Apr 2024 10:18:01 +0200 Subject: [PATCH] Generate insert commands for isolated number-only tables --- pythonProject/main.py | 11 +++++++++ pythonProject/schema.sql | 9 +------- pythonProject/sqlgenerator/SQLGenerator.py | 27 ++++++++++++++++++++++ pythonProject/sqlparse/SQLParser.py | 5 ++-- 4 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 pythonProject/sqlgenerator/SQLGenerator.py diff --git a/pythonProject/main.py b/pythonProject/main.py index c8e0db3..d3105c6 100644 --- a/pythonProject/main.py +++ b/pythonProject/main.py @@ -1,5 +1,6 @@ # This is a sample Python script. from sqlparse import SQLParser +from sqlgenerator import SQLGenerator # Press Umschalt+F10 to execute it or replace it with your code. @@ -7,6 +8,16 @@ from sqlparse import SQLParser def main(): sql_tables = SQLParser.parse_sql_file("schema.sql") + inserts = [] + for table in sql_tables: + for i in range(0, 100): + inserts.append(SQLGenerator.generate_random_insert(table)) + + with open("inserts.sql", "w") as file: + for insert in inserts: + file.write(insert + "\n") + + diff --git a/pythonProject/schema.sql b/pythonProject/schema.sql index 6113eee..c2456ee 100644 --- a/pythonProject/schema.sql +++ b/pythonProject/schema.sql @@ -2,11 +2,4 @@ CREATE TABLE `test` ( `id` bigint(20) NOT NULL, `test_value` int(11) NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci - -CREATE TABLE `test2` ( - `id` bigint(20) NOT NULL, - `test_value` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci - +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci \ No newline at end of file diff --git a/pythonProject/sqlgenerator/SQLGenerator.py b/pythonProject/sqlgenerator/SQLGenerator.py new file mode 100644 index 0000000..586e698 --- /dev/null +++ b/pythonProject/sqlgenerator/SQLGenerator.py @@ -0,0 +1,27 @@ +import random +from sqlparse.SQLColumn import SQLColumn, SQLColumnType +from sqlparse.SQLTable import SQLTable + +min_bigint = 0 +max_bigint = 9223372036854775807 + +min_int = -2147483648 +max_int = 2147483647 + +def generate_random_insert(sql_table: SQLTable): + columnValues = [] + for column in sql_table.columns: + columnValues.append(generate_random_column(column)) + + sql_insert_command = "INSERT INTO " + sql_table.table_name + " VALUES (${i});" + for columnValue in columnValues: + sql_insert_command = sql_insert_command.replace("${i}", str(columnValue) + ", ${i}") + sql_insert_command = sql_insert_command.replace(", ${i}", "") + return sql_insert_command + + +def generate_random_column(sql_column: SQLColumn): + if sql_column.columnType == SQLColumnType.BIGINT: + return random.randint(min_bigint, max_bigint) + elif sql_column.columnType == SQLColumnType.INT: + return random.randint(min_int, max_int) \ No newline at end of file diff --git a/pythonProject/sqlparse/SQLParser.py b/pythonProject/sqlparse/SQLParser.py index 5975f97..f0e836d 100644 --- a/pythonProject/sqlparse/SQLParser.py +++ b/pythonProject/sqlparse/SQLParser.py @@ -22,7 +22,7 @@ def split_table_definition(sql_string: str): def parse_sql_file(sql_path: str): sql_string = read_sql_file(sql_path) sql_tables = split_table_definition(sql_string) - processed_tables = [SQLTable] + processed_tables = [] for sql_table in sql_tables: table = parse_table_sql(sql_table) processed_tables.append(table) @@ -46,7 +46,8 @@ def process_table_content(table_content: str, table_name: str): else: column = parse_column_definition(column_definition) columns.append(column) - return SQLTable(table_name, columns, primary_key) + table = SQLTable(table_name, columns, primary_key) + return table def parse_column_definition(column_definition: str):