From cd52ceb474dc2a3d1dc5c333889beae19d61300b Mon Sep 17 00:00:00 2001 From: "xuanyi.wang" Date: Wed, 24 May 2023 22:34:11 +0200 Subject: [PATCH] Upload files to '' --- SQLAlchemy.py | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 SQLAlchemy.py diff --git a/SQLAlchemy.py b/SQLAlchemy.py new file mode 100644 index 0000000..256658c --- /dev/null +++ b/SQLAlchemy.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[ ]: + + +from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime, ForeignKey +from sqlalchemy.orm import sessionmaker, relationship +from sqlalchemy.ext.declarative import declarative_base + + +# In[ ]: + + +# Create a base class for declarative models +Base = declarative_base() + +class Product(Base): + __tablename__ = 'product' + id = Column(Integer, primary_key=True) + name = Column(String) + SKU_PLU_UPC_number = Column(String) + price_histories = relationship("PriceHistory", back_populates="product") + +class Retailer(Base): + __tablename__ = 'retailer' + id = Column(Integer, primary_key=True) + name = Column(String) + products = relationship("Product", secondary="retailer_product") + +class Price(Base): + __tablename__ = 'price' + id = Column(Integer, primary_key=True) + MOQ = Column(Integer) + price = Column(Float) + +class ScraperJob(Base): + __tablename__ = 'scraper_job' + id = Column(Integer, primary_key=True) + start_time = Column(DateTime) + end_time = Column(DateTime) + parameters = Column(String) + statistics = Column(String) + +class PriceHistory(Base): + __tablename__ = 'price_history' + id = Column(Integer, primary_key=True) + location = Column(String) + zip_code = Column(Integer) + city_name = Column(String) + price_at_time = Column(DateTime) + price = Column(Float) + scraper_job_id = Column(Integer, ForeignKey('scraper_job.id')) + product_id = Column(Integer, ForeignKey('product.id')) + product = relationship("Product", back_populates="price_histories") + scraper_job = relationship("ScraperJob") + +class User(Base): + __tablename__ = 'user' + id = Column(Integer, primary_key=True) + username = Column(String) + credentials = Column(String) + creation_date = Column(DateTime) + modification_date = Column(DateTime) + +class RetailerProduct(Base): + __tablename__ = 'retailer_product' + retailer_id = Column(Integer, ForeignKey('retailer.id'), primary_key=True) + product_id = Column(Integer, ForeignKey('product.id'), primary_key=True) + + +# In[ ]: + + +# Create the database engine +engine = create_engine('sqlite:///user_database.db') +Base.metadata.create_all(engine) + + +# In[ ]: + + +# Create a session factory +Session = sessionmaker(bind=engine) +session = Session() + + +# In[ ]: + + +import sys + +# Create a command-line tool that parses sys.argv to allow a user to create/edit/delete user objects. + +if len(sys.argv) < 2: + print("Usage: python script.py [create|edit|delete] [username] [credentials]") + sys.exit(1) + +command = sys.argv[1] + +if command == "create": + if len(sys.argv) < 4: + print("Usage: python script.py create [username] [credentials]") + sys.exit(1) + + username = sys.argv[2] + credentials = sys.argv[3] + + # Create a new user object + new_user = User(username=username, credentials=credentials) + session.add(new_user) + session.commit() + print("User created successfully!") + +elif command == "edit": + if len(sys.argv) < 4: + print("Usage: python script.py edit [username] [new_credentials]") + sys.exit(1) + + username = sys.argv[2] + new_credentials = sys.argv[3] + + # Find the user object + user = session.query(User).filter_by(username=username).first() + + if user: + # Update user credentials + user.credentials = new_credentials + session.commit() + print("User edited successfully!") + else: + print("User not found!") + +elif command == "delete": + if len(sys.argv) < 3: + print("Usage: python script.py delete [username]") + sys.exit(1) + + username = sys.argv[2] + + # Find the user object + user = session.query(User).filter_by(username=username).first() + + if user: + # Delete the user object + session.delete(user) + session.commit() + print("User deleted successfully!") + else: + print("User not found!") + +else: + print("Invalid command!") + + +# In[ ]: + + +from flask import Flask, render_template +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + + +# In[ ]: + + +app = Flask(__name__) + +# Create a database connection +engine = create_engine('sqlite:///user_database.db') +Session = sessionmaker(bind=engine) +session = Session() + +@app.route('/') +def home(): + # Get all user objects + users = session.query(User).all() + return render_template('index.html', users=users) + +if __name__ == '__main__': + app.run() +