Добавлять новые элементы только в базу данных

#python #database #syntax #sqlalchemy

#python #База данных #синтаксис #sqlalchemy

Вопрос:

У меня есть таблица, classes которая имеет поля:

course name
times_mentioned

Итак, что я пытаюсь сделать, это. course_name Сначала установите и times_Mentioned равным нулю. Но когда пользователь, например, на моем веб-сайте выбирает класс, я просто хочу добавить это имя класса и продолжать добавлять 1 times_mentioned для определенного класса.

Это то, что у меня есть до сих пор

 class popular_courses(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(80), unique=True, default=None)
    times_mentioned =db.Column(db.String(80), default=None, unique=True)
    def __repr__(self):
        return '<Popular Courses %r>' % (self.name) 

@app.route('/add/<coursename>')
def AddCourseName(coursename):
    addPopularCourse = popular_courses(name=coursename, times_mentioned=##DONT KNOW THE SYNTAX)
 

Так что, как я бы хотел, чтобы имя класса и добавляло 1 каждый раз, когда пользователь посещает / добавляет URL. Как бы я это сделал? Я тоже не знаю синтаксиса для этого.

@app.route(‘/add/’)

 def AddCourseName(coursename):
    try:
        addPopularCourse = popular_courses(name=coursename, times_mentioned=1)
        db.session.add(addPopularCourse)
        db.session.commit()
        return "added! "    coursename   " to db"
    except exc.SQLAlchemyError:
        db.session.rollback()
        user = popular_courses.query.filter_by(name=coursename).first()
        user.name = coursename
        user.times_mentioned  = 1
        db.session.commit()
 

Является ли это эффективным подходом?

Комментарии:

1. сначала измените times_mentioned тип на integer then в представлениях перед созданием экземпляра модели проверьте, существует ли экземпляр в БД, если да, извлеките объект, увеличьте счетчик, сохраните объект, еще создайте объект и присвоите times_mentioned 1

2. @HishamKaram Я понял что-то очень похожее на это. Я обновлю свой поток, и если бы вы могли просмотреть его и посмотреть, эффективный ли это подход!

3. ждем вас

4. подождите, я напишу псевдокод для вас

5. Он не добавит новый экземпляр, потому что в моей модели курса я сделал имя курса уникальным 😉

Ответ №1:

1- изменить тип times_mentioned на integer

2- используйте count функцию, чтобы проверить, существует ли экземпляр, если это так, увеличьте счетчик, иначе создайте новый

 def AddCourseName(coursename):
    if db.session.query(popular_courses.id).filter(popular_courses.nam‌​e==coursename).count‌​() > 0:
        course = popular_courses.query.filter_by(name=coursename).first()
        course.name = coursename
        course.times_mentioned  = 1
        db.session.commit()
        return "increased by 1! "
    else:
        addPopularCourse = popular_courses(name=coursename, times_mentioned=1)
        db.session.add(addPopularCourse)
        db.session.commit()
        return "added! "    coursename   " to db"