2017-06-05 131 views
0

我正在嘗試基於用戶輸入執行數據庫搜索。以下代碼中的DBresults函數旨在捕獲存儲在「ranumber」中的輸入,並對該特定記錄執行SQL搜索。我似乎無法得到這個工作。我試過很多產生各種錯誤的東西,但是我得到的最新錯誤是「TypeError:並非在字符串格式化過程中轉換了所有參數」。 我在這裏錯過了什麼?基於用戶輸入使用python函數執行psycopg2數據庫搜索

def connectToDB(): 
     psycopg2.connect('dbname=reportingdb user=rai_gui password=Rad1oInd host=10.100.51.42') 

def DBresults(ranumber): 
     conn = psycopg2.connect('dbname=reporting user=rai_user password=Rad1odsfdInd host=10.100.47.42') 
     cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 
     cur.execute("SELECT * FROM radio_archive_index_gui.radio_archive_index_gui WHERE rai_number= %s", (ranumber)) 
     searchresults = cur.fetchall() 
     print (searchresults) 


####Index Page 
@app.route('/', methods=['GET', 'POST']) 
@app.route('/index', methods=['GET', 'POST']) 
def index(): 
    exception = "" 
     try: 
      connectToDB 
     except: 
      exception = 'Failure to connect to db' 

     form = StaffNames() 
     if not exception: 
      if form.validate_on_submit(): 
       query = { 
        'staff': dict(staff_choices).get(form.staff.data), 
        'ranumber': form.ranumber.data 
       } 


       return redirect(url_for('results', **query)) 

     return render_template(
      'index.html', title='Search Page', exception=exception, form=form 
     ) 

#####Results Page 

@app.route('/results') 
def results(): 
    ranumber = request.args.get('ranumber', None) 
     staff = request.args.get('staff', None) 
     DBresults() 

     return render_template(
     'results.html', title='Results', staff=staff, ranumber=ranumber 
    ) 

這裏是我的form.py文件,如果有幫助:

staff_choices=[("", ""), ('1', 'John Jones'), ('2', 'Chris Hughes'), ('    3', 'Lyn bear')] 
class StaffNames(Form): 
     ranumber = StringField('ranumber', validators=[DataRequired()]) 
     staff = SelectField('staff',choices=staff_choices,validators=[DataRequired()]) 
+1

你的例子中似乎有一些遺漏的代碼。你在'index()'中的'connectToDB()'調用中丟失了括號,並且你沒有在結果中將'ranumber'傳遞給'DBresults()'。 – cmpgamer

+0

謝謝,奇怪的是,connectToDB部分沒有使用圓括號,但現在我已經將它們包括進來以便進行良好的練習。 DBresults建議非常感謝。 – nmh

回答

1

嘗試編輯

cur.execute("SELECT * FROM radio_archive_index_gui.radio_archive_index_gui WHERE rai_number= %s", (ranumber))

cur.execute("SELECT * FROM radio_archive_index_gui.radio_archive_index_gui WHERE rai_number= %s", (ranumber,))

(ranumber)需要採用元組格式才能正常工作。

+0

這與@cmpgamer建議一起解決了我的問題,謝謝。 – nmh