111 lines
3.2 KiB
Python
111 lines
3.2 KiB
Python
class Table:
|
|
def __init__(self, name):
|
|
self.name = name
|
|
self.columns = []
|
|
self.rows = []
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def __repr__(self):
|
|
return self.name
|
|
|
|
def _try_parse_int(self, value: str) -> int:
|
|
try:
|
|
return int(value)
|
|
except ValueError:
|
|
return value
|
|
|
|
def load_from_csv(self, csv_file):
|
|
with open(csv_file, 'r') as f:
|
|
reader = f.read().splitlines()
|
|
|
|
# Primeira linha contêm o nome das colunas
|
|
self.columns = reader[0].split(',')
|
|
reader.pop(0)
|
|
|
|
for row in reader:
|
|
row = row.split(',')
|
|
row_list = []
|
|
|
|
for column in row:
|
|
row_list.append(self._try_parse_int(column))
|
|
|
|
self.rows.append(row_list)
|
|
|
|
def load_from_mysql(self, table_name, cursor):
|
|
cursor.execute("SELECT * FROM " + table_name)
|
|
rows = cursor.fetchall()
|
|
|
|
for row in rows:
|
|
row_list = []
|
|
|
|
for col in row:
|
|
row_list.append(col)
|
|
|
|
self.rows.append(row_list)
|
|
|
|
'''
|
|
self.rows = [
|
|
["dp001", "Customer Service"]
|
|
]
|
|
'''
|
|
|
|
cursor.execute("SHOW COLUMNS FROM " + table_name)
|
|
columns = cursor.fetchall()
|
|
|
|
for row in columns:
|
|
self.columns.append(row[0])
|
|
|
|
def save_to_csv(self):
|
|
f = open("./source/" + self.name + ".csv", "w")
|
|
|
|
# gravar o cabeçalho
|
|
columns_line = ""
|
|
for i in range(len(self.columns)):
|
|
columns_line = columns_line + self.columns[i]
|
|
if i < len(self.columns) - 1:
|
|
columns_line = columns_line + ","
|
|
f.write(columns_line + '\n')
|
|
|
|
for line in range(len(self.rows)):
|
|
data_line = ""
|
|
|
|
for column in range(len(self.columns)):
|
|
data_line = data_line + str(self.rows[line][column])
|
|
if column < len(self.columns) - 1:
|
|
data_line = data_line + ","
|
|
|
|
f.write(data_line + '\n')
|
|
|
|
f.close()
|
|
|
|
def print_columns(self, column_list: list, where_filter: list = None, join_stmt: list = None):
|
|
if column_list[0] == '*':
|
|
column_list = self.columns
|
|
|
|
print(', '.join(column_list))
|
|
print('-' * 20)
|
|
|
|
for row in self.rows:
|
|
if where_filter is not None:
|
|
column_index = self.columns.index(where_filter[0])
|
|
row_value = row[column_index]
|
|
|
|
if where_filter[1] == '=':
|
|
if row_value != where_filter[2]:
|
|
continue
|
|
elif where_filter[1] == '>':
|
|
if row_value <= where_filter[2]:
|
|
continue
|
|
elif where_filter[1] == '<':
|
|
if row_value >= where_filter[2]:
|
|
continue
|
|
|
|
row_values = []
|
|
for column in column_list:
|
|
column_index = self.columns.index(column)
|
|
row_values.append(row[column_index])
|
|
|
|
print(', '.join(row_values))
|