2017-06-05 47 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

相关问题