Ошибка синтаксиса SQL в имени таблицы - PullRequest
0 голосов
/ 25 августа 2018

Я только что закончил сегмент об остановке спама в базе данных форумов, и теперь пришло время очистить их.

Цель состоит в том, чтобы использовать оператор update для обновления записей базы данных иудалить сообщения, помеченные как спам.После того, как я почесал голову и получил расплывчатые подсказки и инструкции от онлайн-инструктора (это для онлайн-класса), я столкнулся с ошибкой.

Это может быть неправильный способ сделать это, и яищу руководство после того, как не повезло на Google.Вот фрагмент forumdb.py:

# "Database code" for the DB Forum.

import bleach
import psycopg2
import datetime

DBNAME = "forum"

def get_posts():
  """Return all posts from the 'database', most recent first."""
  db = psycopg2.connect(database=DBNAME)
  c = db.cursor()
  UPDATE posts
    SET content = 'cheese'
    WHERE content like 'spam' ;
  c.execute("select content, time from posts order by time desc")
  return c.fetchall()
  db.close()

def add_post(content):
  """Add a post to the 'database' with the current timestamp."""
  db = psycopg2.connect(database=DBNAME)
  c = db.cursor()
  clean_cont = bleach.clean(content)
  c.execute("insert into posts values (%s)", (clean_cont,))
  db.commit()
  db.close()

И вот ошибка, которую я получаю:

Traceback (most recent call last):
  File "forum.py", line 7, in <module>
    from forumdb import get_posts, add_post
  File "/vagrant/forum/forumdb.py", line 13
    UPDATE posts
           ^
SyntaxError: invalid syntax

В случае, если это помогает, вот forum.py:

#!/usr/bin/env python3
# 
# A buggy web service in need of a database.

from flask import Flask, request, redirect, url_for

from forumdb import get_posts, add_post

app = Flask(__name__)

# HTML template for the forum page
HTML_WRAP = '''\
<!DOCTYPE html>
<html>
  <head>
    <title>DB Forum</title>
    <style>
      h1, form { text-align: center; }
      textarea { width: 400px; height: 100px; }
      div.post { border: 1px solid #999;
                 padding: 10px 10px;
                 margin: 10px 20%%; }
      hr.postbound { width: 50%%; }
      em.date { color: #999 }
    </style>
  </head>
  <body>
    <h1>DB Forum</h1>
    <form method=post>
      <div><textarea id="content" name="content"></textarea></div>
      <div><button id="go" type="submit">Post message</button></div>
    </form>
    <!-- post content will go here -->
%s
  </body>
</html>
'''

# HTML template for an individual comment
POST = '''\
    <div class=post><em class=date>%s</em><br>%s</div>
'''


@app.route('/', methods=['GET'])
def main():
  '''Main page of the forum.'''
  posts = "".join(POST % (date, text) for text, date in get_posts())
  html = HTML_WRAP % posts
  return html


@app.route('/', methods=['POST'])
def post():
  '''New post submission.'''
  message = request.form['content']
  add_post(message)
  return redirect(url_for('main'))


if __name__ == '__main__':
  app.run(host='0.0.0.0', port=8000)

Заранее благодарен всем, кто обладает умственными способностями, чтобы помочь!

1 Ответ

0 голосов
/ 25 августа 2018

ваш запрос

UPDATE posts
SET content = 'cheese'
WHERE content like 'spam' ;

выходит за рамки. удалить или поставить это на функцию c.execute(), как показано ниже

c.execute("UPDATE posts SET content = 'cheese' WHERE content like 'spam';");

Вот почему вы получаете эту ошибку, надеюсь, это поможет.

...