Generate inserts command considering string columns

This commit is contained in:
Sebastian Böckelmann 2024-04-17 10:40:55 +02:00
parent 5ba3fad6cc
commit e1c76efc03
5 changed files with 36 additions and 7 deletions

View File

@ -1,5 +1,7 @@
CREATE TABLE `test` ( CREATE TABLE `test` (
`id` bigint(20) NOT NULL, `id` bigint(20) NOT NULL,
`test_value` int(11) NOT NULL, `test_value` int(11) NOT NULL,
PRIMARY KEY (`id`) `test_string` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

View File

@ -0,0 +1,12 @@
from enum import Enum
class ValueType(Enum):
INT = 0,
STRING = 1
class ColumnValue:
def __init__(self, value, value_type: ValueType):
self.value = value
self.valueType = value_type

View File

@ -1,6 +1,9 @@
import random import random
from sqlgenerator.ColumnValue import ValueType, ColumnValue
from sqlparse.SQLColumn import SQLColumn, SQLColumnType from sqlparse.SQLColumn import SQLColumn, SQLColumnType
from sqlparse.SQLTable import SQLTable from sqlparse.SQLTable import SQLTable
from lorem_text import lorem
min_bigint = 0 min_bigint = 0
max_bigint = 9223372036854775807 max_bigint = 9223372036854775807
@ -15,13 +18,22 @@ def generate_random_insert(sql_table: SQLTable):
sql_insert_command = "INSERT INTO " + sql_table.table_name + " VALUES (${i});" sql_insert_command = "INSERT INTO " + sql_table.table_name + " VALUES (${i});"
for columnValue in columnValues: for columnValue in columnValues:
sql_insert_command = sql_insert_command.replace("${i}", str(columnValue) + ", ${i}") if columnValue.valueType == ValueType.INT:
sql_insert_command = sql_insert_command.replace("${i}", str(columnValue.value) + ", ${i}")
else:
sql_insert_command = sql_insert_command.replace("${i}", "'"+columnValue.value+"', ${i}")
sql_insert_command = sql_insert_command.replace(", ${i}", "") sql_insert_command = sql_insert_command.replace(", ${i}", "")
return sql_insert_command return sql_insert_command
def generate_random_column(sql_column: SQLColumn): def generate_random_column(sql_column: SQLColumn):
if sql_column.columnType == SQLColumnType.BIGINT: if sql_column.columnType == SQLColumnType.BIGINT:
return random.randint(min_bigint, max_bigint) return ColumnValue( random.randint(min_bigint, max_bigint), ValueType.INT)
elif sql_column.columnType == SQLColumnType.INT: elif sql_column.columnType == SQLColumnType.INT:
return random.randint(min_int, max_int) return ColumnValue(random.randint(min_int, max_int), ValueType.INT)
elif sql_column.columnType == SQLColumnType.VARCHAR:
text_legnth = random.randint(1, 255)
lorem_text = lorem.sentence()
return ColumnValue(lorem_text[:text_legnth], ValueType.STRING)

View File

@ -4,6 +4,7 @@ from enum import Enum
class SQLColumnType(Enum): class SQLColumnType(Enum):
BIGINT = 'bigint(20)' BIGINT = 'bigint(20)'
INT = 'int(11)' INT = 'int(11)'
VARCHAR = 'varchar(255)'
class SQLColumn: class SQLColumn:

View File

@ -68,6 +68,8 @@ def get_column_type(column_definition: str):
return SQLColumn.SQLColumnType.BIGINT return SQLColumn.SQLColumnType.BIGINT
elif column_definition_characteristic == 'int(11)': elif column_definition_characteristic == 'int(11)':
return SQLColumn.SQLColumnType.INT return SQLColumn.SQLColumnType.INT
elif column_definition_characteristic == 'varchar(255)':
return SQLColumn.SQLColumnType.VARCHAR
def get_column_name(column_definition: str): def get_column_name(column_definition: str):