Gilles Ganault wrote:
> Hello
> 
> I use regexes to extract information from a text file. Some of the
> records don't have e-mails or www addresses, so those must match Null
> in SQL, but None doesn't work as expected:
> 
> =======
>       if itemmatch:
>               web = itemmatch.group(1).strip()
>       else:
>               web = None
> 
>       sql = 'INSERT INTO mytable  (name,address,web,mail) VALUES
> ("%s","%s","%s","%s","%s")' % (name,address,web,mail)
> =======
> 
I take it this code isn't pasted from an actual program, since the
statement above would give a run time ValueError.

> Is there a better way in Python to have a variable match NULL than
> building the SQL query step by step?
> 
You could, of course, have replaced None in your code with "NULL", and
that should have removed the database errors you were observing.

Retaining the None, however, you could move to using parameterized
queries. Replace each '"%s"' in your sql string with the appropriate
parameter mark (could be '%s', could be '?', could be three other things
depending on your database platform.

Then you provide a tuple of data items (using None for the NULL values)
as a second argument to the cursor's .execute() method, and the database
driver module inserts the data in to the SQL statement, escaping things
where appropriate.

So, supposing you were using MySQL or PostgreSQL you would write

        if itemmatch:
                web = itemmatch.group(1).strip()
        else:
                web = None

        sql = '''INSERT INTO mytable  (name,address,web,mail)
                 VALUES (%s, %s, %s, %s)'''
        cursor.execute(sql, (name,address,web,mail))

Don't forget to call the connection's .commit() method to ensure the
database changes are made permanent.

regards
 Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to