#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
12. @HishamKaram Я понял что-то очень похожее на это. Я обновлю свой поток, и если бы вы могли просмотреть его и посмотреть, эффективный ли это подход!
3. ждем вас
4. подождите, я напишу псевдокод для вас
5. Он не добавит новый экземпляр, потому что в моей модели курса я сделал имя курса уникальным 😉
Ответ №1:
1- изменить тип times_mentioned
на integer
2- используйте count
функцию, чтобы проверить, существует ли экземпляр, если это так, увеличьте счетчик, иначе создайте новый
def AddCourseName(coursename):
if db.session.query(popular_courses.id).filter(popular_courses.name==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"