2017-08-05 66 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'只是簡單的輸入字符串字段,它包含一個單詞。 –