1

Im trying to make a function that will paste information into a database incase its empty i got it to work if i use

customer_name = "Ilya"
    customer_details = session.query(db.Customers).filter(
    db.Customers.name == customer_name).first()

but the problem is if the customer under the name "Ilya" gets removed it will readd all of information again how do i make it only work if the database is empty?

from sqlalchemy.orm import sessionmaker


def db_load_example_data(app, db,session):
    customer_name = "Ilya"
    customer_details = session.query(db.Customers).filter(
    db.Customers.name == customer_name).first()
    if customer_details:
        pass
    else:
        #books
        book_01 = db.Books(name="The Teachings Of Don Juan: A Yaqui Way of Knowledge", author="Carlos Castaneda", year_published=1968, type=1)
        book_02 = db.Books(name="Journeys out of the body", author="Robert Monroe", year_published=1971, type=2)
        book_03 = db.Books(name="Lucid Dreaming The power of being aware and awake in your dreams", author="Stephen LaBerge", year_published=1985, type=3)

        # customers
        custormer_00 = db.Customers(name="Ilya", city="TelAviv", age=22)
        custormer_01 = db.Customers(name="Jack", city="RoshHain", age=35)
        custormer_02 = db.Customers(name="Michael", city="Haifa", age=38)
        
        # loans
        loan_01 = db.Loans(customer_id="1", book_id="1", loan_date="2022-10-06", return_date="2022-10-08")

        with app.app_context():
            db.base.metadata.create_all(db.engine)
            Session = sessionmaker(bind=db.engine)  # initialize sessionmaker
            session = Session()  # make Session object
            session.add(custormer_00)
            session.add(custormer_01)
            session.add(custormer_02)
            session.add(book_01)
            session.add(book_02)
            session.add(book_03)
            session.add(loan_01)
            session.commit()

this is my db

# import statements
from sqlalchemy import create_engine
from sqlalchemy import Column, String, Integer, ForeignKey
from sqlalchemy.ext.declarative import declarative_base

# create engine
engine = create_engine('sqlite:///library.sqlite', echo=True,
                       connect_args={'check_same_thread': False})
base = declarative_base()

# Books Table


class Books(base):

    __tablename__ = 'Books'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    author = Column(String)
    year_published = Column(String)
    type = Column(Integer)

    def __init__(self, name, author, year_published, type):
        self.name = name
        self.author = author
        self.year_published = year_published
        self.type = int(type)

# Customers Table


class Customers(base):
    __tablename__ = 'Customers'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    city = Column(String)
    age = Column(Integer)

    def __init__(self, name, city, age):
        self.name = name
        self.city = city
        self.age = int(age)

# Loans Table


class Loans(base):
    __tablename__ = 'Loans'
    id = Column(Integer, primary_key=True)
    customer_id = Column(Integer, ForeignKey(
        "Customers.id", ondelete="CASCADE"), nullable=False)
    book_id = Column(Integer, ForeignKey(
        "Books.id", ondelete="CASCADE"), nullable=False)
    loan_date = Column(String)
    return_date = Column(String)

    def __init__(self, customer_id, book_id, loan_date, return_date):
        self.customer_id = int(customer_id)
        self.book_id = int(book_id)
        self.loan_date = loan_date
        self.return_date = return_date
2
  • I use len() on the query variable. If len == 0, db is empty. Commented Oct 25, 2022 at 10:25
  • You could make the name column unique so you can catch the IntegrityError and avoid inserting it twice (if that is what you are trying to do. I guess it makes little sense to have a DB table to store one row only) Commented Oct 25, 2022 at 10:35

1 Answer 1

1

I realize this might be very obvious, but why do you filter your query?

What if you did

session.query(db.Customers).first()

instead of

session.query(db.Customers).filter(db.Customers.name == customer_name).first()

Then you could check if there are any users in the database instead of checking for a specific user.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.