Проверьте, был ли элемент уже вставлен в базу данных, прежде чем вставлять его - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь внести статьи в базу данных. Это работало нормально, но я заметил, что он будет вводить дубликаты тех же статей. Я хотел проверить, есть ли статья в базе данных, прежде чем вводить ее снова, поэтому я добавил следующие строки:

maybe_existing_article = Article.query.filter_by(url())
                if (maybe_existing_article):
                    article = maybe_existing_article.url
                    return "exists"
                else:

Теперь я получаю "NameError: name 'article' is not определены ", хотя это глобальная статья, которая работала, пока я не начал пытаться проверить, есть ли она в базе данных. Я никогда не делал этого раньше, поэтому у меня такое чувство, что я, вероятно, делаю несколько вещей неправильно, но я не знаю что. Вот полный код:

class Article(db.Model):
    # object mirrors table 'article'
    id = db.Column('id', db.Integer, primary_key=True)
    title = db.Column(db.String(400))
    url = db.Column(db.String(400))
    image_url = db.Column(db.String(400))
    snippet = db.Column(db.String(1000))
    date_upload = db.Column(db.DateTime(), default=datetime.utcnow)

    def __init__(self, title, url, image_url, snippet):
        self.title = title
        self.url = url
        self.image_url = image_url
        self.snippet = snippet
##############################################
@app.route('/bootstrap', methods=['GET', 'POST'])
def bootstrap():
    posted = 1
    print ("bootstrap")
    global article
    if request.method == 'POST':
        if not request.form['title'] or not request.form['url'] or not request.form['image_url'] or not request.form['snippet']:
            flash('Please enter all the fields', 'error')
        else:
            maybe_existing_article = Article.query.filter_by(url())
            if (maybe_existing_article):
                article = maybe_existing_article.url
                return "exists"
            else:

                article = Article(request.form['title'], request.form['url'], request.form['image_url'],
                                   request.form['snippet'])

                db.session.add(article)
                try:
                    db.session.commit()
                except exc.SQLAlchemyError:
                   flash('Article url already exists, failed to post new article')
                   posted = 0
                   #return render_template('/error.html', article_url=article.url)

                article_list = Article.query.filter_by(url=article.url)
                if posted == 1:
                    flash('Record was successfully added')
                else:
                    db.session.rollback()
                    article_list = Article.query.filter_by(url=article.url)
                    article=article_list[0]

                print ("article.id=" + str(article.id))
                import json
                print("a")
                return json.dumps(article.id)

    else:
        print("article.id=" + str(article.id))
        urlNumber = str(article.id)

        message = {'greeting':urlNumber}
        return jsonify(message)  # serialize and use JSON headers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...