36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
from DbSetup import engine, session, databaseUrl
|
|
import pandas as pd
|
|
from sqlalchemy import desc, select
|
|
from Tables import Toots
|
|
|
|
class CRUDManager():
|
|
|
|
def saveToDatabase(self, dataframe, table:str, useIndex=False):
|
|
try:
|
|
dataframe.to_sql(table, engine, index=useIndex, if_exists="append")
|
|
except:
|
|
print(f'Could not save data to {table}!')
|
|
|
|
def loadFromDatabase(self, table:str, indexColumn=None):
|
|
return pd.read_sql_table(table, databaseUrl, index_col=indexColumn)
|
|
|
|
def getLastToot(self):
|
|
stmt = select(Toots.tootId).order_by(desc('datetime'))
|
|
return session.scalars(stmt).first()
|
|
|
|
def calculateAggregates(self, column, aggregate='Count'):
|
|
if (aggregate=='Count'):
|
|
addGroup = f', {column} '
|
|
else:
|
|
addGroup = ''
|
|
query = f'''SELECT DATE(datetime) as date {addGroup}, {aggregate}({column}) as {column}{aggregate}
|
|
FROM Toots
|
|
GROUP BY DATE(datetime)''' \
|
|
+ addGroup \
|
|
+ '''HAVING datetime >= DATE("now","-1 day")
|
|
AND datetime < DATE("now")'''
|
|
return pd.read_sql(
|
|
query,
|
|
databaseUrl,
|
|
parse_dates=["datetime"]
|
|
)
|