我是 Flask 和 python 的新手,当我尝试使用“LIKE %s”从 Flask 应用程序中的数据库检索时,我得到 AttributeError("'list' object has no attribute 'keys'",) 但如果我使用占位符“title =:结果”我将只检索一行,但我不能使用 LIKE 子句,我只能检索数据库中的确切数据,不知道如何解决我手头的问题,任何帮助将不胜感激。
应用程序.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)
如果我能得到任何帮助,我将非常感激。提前致谢!
回溯
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'
最佳答案
我强烈建议使用 sqlalchemy orm 功能,而不是构建自己的 sql 查询。首先你声明一个类,例如
class Book(db.Model):
__tablename__ = 'books'
title = Column(String, primary_key = True)
然后就可以使用
books = sess.query(Book).filter(Book.title.like(likeString))
关于python - AttributeError ("' list'对象没有属性 'keys'“,)在带有sqlachemy的 flask 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52529336/