AttributeError («объект списка» не имеет атрибута «keys» ») в колбе с sqlachemy - PullRequest
0 голосов
/ 27 сентября 2018

Я новичок в фляге и питоне. Когда я пытаюсь получить данные из моей базы данных в приложении фляги с "LIKE% s", я получаю AttributeError ("объект" списка "не имеет атрибута" keys ""), но если я используюзаполнитель "title =: result" я получу только одну строку, но я не могу использовать предложение LIKE, я могу получить только те точные данные, которые у меня есть в моей базе данных, не знаю, как решить проблему, которая у меня есть,любая помощь будет высоко оценена.

Application.py

@app.route("/search",methods=['GET', 'POST'])
def search():    
  if request.method=='GET':
       return render_template("search.html")
       #search=request.form.get['search']
    else:
        try:
            res =request.form.get('search')
            likeString = "'%%"+res+"%%'"
            if likeString!="":
                #return (res)
                results=db.execute('''SELECT title FROM books WHERE title LIKE %s;''', likeString).fetchall()
                #results=db.execute("SELECT title FROM books WHERE title =:result",
                #{"result": res}).fetchall()
                if results is None:
                   return render_template("error.html", message="No such book")
                else:

                   return render_template("search.html",results=results)
            else:
                return ("you didn't enter a search value")

        except Exception as e:
                raise ValueError ("could not retrieve from database",e)

Буду очень признателен, если смогу получить какую-либо помощь.Заранее спасибо!

Traceback

    File "/home/ochula/.local/lib/python3.5/site-packages/flask/app.py", line 2309, in __call__
return self.wsgi_app(environ, start_response)
File "/home/ochula/.local/lib/python3.5/site-packages/flask/app.py", line 2295, in wsgi_app
response = self.handle_exception(e)
File "/home/ochula/.local/lib/python3.5/site-packages/flask/app.py", line 1741, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/ochula/.local/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/ochula/.local/lib/python3.5/site-packages/flask/app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "/home/ochula/.local/lib/python3.5/site-packages/flask/app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/ochula/.local/lib/python3.5/site-packages/flask/app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/ochula/.local/lib/python3.5/site-packages/flask/_compat.py", line 35, in reraise
raise value
File "/home/ochula/.local/lib/python3.5/site-packages/flask/app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "/home/ochula/.local/lib/python3.5/site-packages/flask/app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/ochula/Downloads/Harvard_webProgramming/Project1/application.py", line 76, in search
results=db.execute('''SELECT title FROM books WHERE title LIKE %s;''', likeString).fetchall()
File "/home/ochula/.local/lib/python3.5/site-packages/sqlalchemy/orm/scoping.py", line 153, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/home/ochula/.local/lib/python3.5/site-packages/sqlalchemy/orm/session.py", line 1176, in execute
bind, close_with_result=True).execute(clause, params or {})
File "/home/ochula/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 948, in execute
return meth(self, multiparams, params)
File "/home/ochula/.local/lib/python3.5/site-packages/sqlalchemy/sql/elements.py", line 269, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/home/ochula/.local/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1028, in _execute_clauseelement
keys = list(distilled_params[0].keys())
AttributeError: 'list' object has no attribute 'keys'

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Спасибо всем, что я смог решить мою проблему. Я запустил этот запрос

 res =request.form.get('search')
        #likeString = "'%%"+res+"%%'"
        if res!="":
            #return(res)
            results=db.execute("SELECT * FROM books WHERE (LOWER(isbn) LIKE LOWER(:res)) OR (LOWER(title) LIKE LOWER(:res)) OR (author LIKE LOWER(:res)) LIMIT 10",
            { "res": '%' + res + '%'} ).fetchall()

И он сделал волшебство для меня!

0 голосов
/ 27 сентября 2018

Я бы настоятельно рекомендовал использовать функциональность sqlalchemy orm вместо создания собственных запросов sql.Сначала вы объявляете класс как

class Book(db.Model):
    __tablename__ = 'books'
    title = Column(String, primary_key = True)

Затем вы можете использовать

books = sess.query(Book).filter(Book.title.like(likeString))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...