2017-08-05 63 views
0

我用这个功能来运行SQL查询MySQL查询:瓶执行与在表达

@staticmethod 
def find_users(query): 
    search_job = query 
    # search_formatted = ' & '.join(words) 

    sql = ("""SELECT first_name,last_name, email, phone, image, diplome, latitude, longitude, description 
    FROM users, jobs 
    WHERE users.id_job = jobs.id 
    AND jobs.description = ? 
      """, [search_job]) 
    cursor = db.session.execute(sql) 
           # {'search_terms': search_job}) 

    # Returns a list of product tuples 
    return cursor.fetchall() 

但我得到这个错误

2017-08-05 18:54:18,421 INFO sqlalchemy.engine.base.Engine (4L,) 2017-08-05 18:54:18,424 INFO sqlalchemy.engine.base.Engine COMMIT 127.0.0.1 - - [05/Aug/2017 18:54:18] "GET/HTTP/1.1" 200 - 127.0.0.1 - - [05/Aug/2017 18:54:19] "GET /static/img/markers_shadow.png HTTP/1.1" 404 - 127.0.0.1 - - [05/Aug/2017 18:54:19] "GET /static/fonts/glyphicons-halflings-regular.woff2 HTTP/1.1" 404 - 127.0.0.1 - - [05/Aug/2017 18:54:19] "GET /static/fonts/glyphicons-halflings-regular.woff HTTP/1.1" 404 - 127.0.0.1 - - [05/Aug/2017 18:54:19] "GET /static/fonts/glyphicons-halflings-regular.ttf HTTP/1.1" 404 - [2017-08-05 18:54:23,162] ERROR in app: Exception on /auth/search [GET] Traceback (most recent call last): File "/home/alaoui/Documents/ProjetHandy/venv-handy/lib/python2.7/site-packages/flask/app.py", line 1988, in wsgi_app response = self.full_dispatch_request() File "/home/alaoui/Documents/ProjetHandy/venv-handy/lib/python2.7/site-packages/flask/app.py", line 1641, in full_dispatch_request rv = self.handle_user_exception(e) File "/home/alaoui/Documents/ProjetHandy/venv-handy/lib/python2.7/site-packages/flask/app.py", line 1544, in handle_user_exception reraise(exc_type, exc_value, tb) File "/home/alaoui/Documents/ProjetHandy/venv-handy/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request rv = self.dispatch_request() File "/home/alaoui/Documents/ProjetHandy/venv-handy/lib/python2.7/site-packages/flask/app.py", line 1625, in dispatch_request return self.view_functionsrule.endpoint File "/home/alaoui/Documents/ProjetHandy/handy_2/app/auth/views.py", line 194, in search_handyman handymans = User.find_handymans(search_query) File "/home/alaoui/Documents/ProjetHandy/handy_2/app/models.py", line 88, in find_handymans cursor = db.session.execute(sql) File "/home/alaoui/Documents/ProjetHandy/venv-handy/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 157, in do return getattr(self.registry(), name)(*args, **kwargs) File "/home/alaoui/Documents/ProjetHandy/venv-handy/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 1101, in execute clause = expression._literal_as_text(clause) File "/home/alaoui/Documents/ProjetHandy/venv-handy/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 4238, in _literal_as_text "instead" % type(element) ArgumentError: SQL expression object or string expected, got object of type instead

+0

你运行一个调试器和验证'search_job'是正确的? –

+0

从终端 – Nabin

回答

0

如果你看看你找到签名execute

execute(clause, params=None, mapper=None, bind=None, **kw) 

然后,看着doc,您会发现:

参数:

  • 条款 - 一个可执行语句(即一个可执行表达式(如expression.select())或要执行的字符串SQL语句。

  • params - 包含绑定参数值的可选字典或字典列表。如果单个字典发生单行执行;如果一个字典列表,“executemany”将被调用。每个字典中的键必须对应于语句中存在的参数名称。

  • mapper - 可选映射器()或映射类,用于标识适当的绑定。查找绑定时,此参数优先于子句。有关更多详细信息,请参阅Session.get_bind()。

  • bind - 可选引擎用作绑定。如果此引擎已经涉及正在进行的交易,则将使用该连接。定位绑定时,此参数优先于映射器和子句。

  • ** kw - 将其他关键字参数发送到Session.get_bind()以允许“绑定”方案的可扩展性。

使用一个调试器来浏览你的代码,看看你实际上是作为参数传递给那个签名。你会发现,你的第二个PARAM,[search_job]并不满足任何与预期则params的,因此你会得到

ArgumentError: SQL expression object or string expected, got object of type instead

+0

添加完整的错误堆栈跟踪你有任何建议更正代码PLZ。 –

+0

也许吧。但我无法调试你的代码。请检查该行,并告诉我们有关'search_job'的信息。阅读[mcve]帮助我们帮助你。 –

+0

'search_job'只是简单的输入字符串字段,它包含一个单词。 –