我如何在单个sql查询中编写多个条件来获取数据 - Python mysql

时间:2013-11-13 11:18:40

标签: python mysql cgi mysql-python

我陷入了困境,我怎么能写这样的SQL查询来进行搜索。我试过并发布了它,但是当用户在表单的多个字段中输入数据并进行搜索时,它并不像预期的那样。

我为单个表单字段编写的查询并进行搜索和显示

#!/usr/bin/python

import cgi
import MySQLdb

class Table():

    def __init__(self, host, user, passwd, name):

        self.db = MySQLdb.connect(host = host, user = user, passwd = passwd, db = name)
        self.cursor = self.db.cursor()

    def getdata(self, fname, lname, age, gender):
        self.fname = fname
        self.lname = lname
        self.age = age
        self.gender = gender

    def mysqlconnect(self):

        sql = "select * from PERSON where F_Name = '%s' or L_Name = '%s' or Age = '%s' or Gender = '%s' " %(self.fname, self.lname, self.age, self.gender)
        self.cursor.execute(sql)
        result = self.cursor.fetchall()

        for row in result:
            print "<br>", row[0], row[1], row[2], row[3]

        self.cursor.close()
        self.db.close()


def main():

    print "Content-type: text/html\n"
    tableobj = Table("localhost", "root", "root", "Info")

    form = cgi.FieldStorage()
    f_name = form.getvalue('firstname', '')
    l_name = form.getvalue('lastname', '')
    age = form.getvalue('age', 0)
    gender = form.getvalue('gender', '')

    tableobj.getdata(f_name, l_name, age, gender)
    tableobj.mysqlconnect()

if __name__ == "__main__":
    main()

如果假设用户在FirstName字段和性别字段中输入数据

 Firstname: Jeremy
 Gender: male

然后它应该显示记录。 如果supposer用户在Age字段和Gender字段中输入数据

Age : 25
Gender: Female

应该显示年龄为25岁的少数男性的结果。 同样所有可能的条件

1 个答案:

答案 0 :(得分:0)

杰里米,

为了回答你的问题,Martijn在这里做了很好的解释:

  

sql =“select * from PERSON,其中F_Name =%s或L_Name =%s或Age =%s或Gender =%s”,&gt;然后是self.cursor.execute(sql,(self.fname,self.lname,self.age,self.gender))

但是,在您的情况下,最好的想法是使用ORM。从长远来看,这将为您省去很多麻烦!

编写自己的SQL查询很好,但是,您可以自己解决几个问题。基于SQL的攻击,以及解析数据的难度,都是两个。

有关ORM的一般信息:http://en.wikipedia.org/wiki/Object-relational_mapping

对于Python,有一些好的。 SQlAlchemy是最知名的,但环顾四周,看看你需要什么。