Python: automate input to MySQL query

Philip Semanchuk philip at semanchuk.com
Mon Sep 21 08:49:27 EDT 2009


On Sep 21, 2009, at 5:18 AM, Threader Slash wrote:

> Hi Everybody...
>
> I have a query that works as follows:
>
> Code:
>
> db.query("""SELECT traveler.travelerFirstName,vaccine.vaccineName from
> (traveler INNER JOIN takenvaccine ON traveler.travelerID =
> takenvaccine.travelerID)
>        INNER JOIN vaccine ON takenvaccine.vaccineID=vaccine.vaccineID
>        INNER JOIN requiredvaccine ON
> vaccine.vaccineID=requiredvaccine.requiredvaccineID
>        INNER JOIN city ON requiredvaccine.cityID = city.cityID
> WHERE traveler.travelerFirstName = 'John'""")
>
> The output gives me all vaccines taken by a given employee. To allow  
> the
> user to choose different names when running the system, I am trying  
> to use a
> variable, named *person*:
>
> Code:
>
> person = "John"
>
> db.query("""SELECT traveler.travelerFirstName,vaccine.vaccineName from
> (traveler INNER JOIN takenvaccine ON traveler.travelerID =
> takenvaccine.travelerID)
>        INNER JOIN vaccine ON takenvaccine.vaccineID=vaccine.vaccineID
>        INNER JOIN requiredvaccine ON
> vaccine.vaccineID=requiredvaccine.requiredvaccineID
>        INNER JOIN city ON requiredvaccine.cityID = city.cityID
> WHERE traveler.travelerFirstName = 'person'""")
>
> Then I run the query inside my python program. The first version  
> without
> variable works fine. But the second, using variable, doesn't give me  
> any
> output. What I am missing here about the python variable sintaxe to  
> make the
> MySQL work with variable ... Any suggestion?

In your second query you've got "person" hardcoded as a string. You're  
looking for a traveler with the actual first name of person.

Change this line:
> WHERE traveler.travelerFirstName = 'person'""")

to this:
> WHERE traveler.travelerFirstName = %s""")

and pass person as a list of params to db.query(). Something like this  
should work:

sql = """SELECT blah blah blah WHERE traveler.travelerFirstName = %s"""
db.query(sql, [person])

See the Python DB API documentation for specifics. This might look  
like the same thing as string interpolation, but it isn't.

Good luck
Philip





More information about the Python-list mailing list