SGBD/table.py

88 lines
2.5 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 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))