An app that helps track groceries and can estimate the next time an item might need to be bought again
To upload files, please first save the app
import streamlit as st
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.orm import Session, DeclarativeBase
class Base(DeclarativeBase):
pass
# Models
class GroceryItem(Base):
__tablename__ = 'grocery_items'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
quantity = Column(Integer, nullable=False)
frequency = Column(Integer, nullable=False) # days until next buy
engine = create_engine("sqlite:///groceries.sqlite")
Base.metadata.create_all(bind=engine)
# Main app logic
st.title("Grocery Tracker")
# Input for new grocery item
with st.form(key='grocery-form'):
item_name = st.text_input("Enter grocery item name:")
quantity = st.number_input("Enter item quantity:", min_value=1)
frequency = st.number_input("Enter how often to buy (in days):", min_value=1)
submit_button = st.form_submit_button(label='Add Grocery Item')
if submit_button and item_name:
with Session(engine) as session:
new_item = GroceryItem(name=item_name, quantity=quantity, frequency=frequency)
session.add(new_item)
session.commit()
st.success(f'Added {item_name} to the grocery list.')
# Display grocery items
with Session(engine) as session:
items = session.query(GroceryItem).all()
if items:
st.write("### Grocery List:")
data = [(item.name, item.quantity, item.frequency, item.frequency - (st.session_state.get('last_buy', 0))) for item in items]
df = pd.DataFrame(data, columns=["Item", "Quantity", "Frequency (days)", "Days until next buy"])
st.table(df)
else:
st.write("No grocery items found.")
# Update last buy reference
def update_last_buy():
st.session_state['last_buy'] = 0
if st.button('Update Last Buy'):
update_last_buy()
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?