MySQLdb integer question

Skip Montanaro skip at pobox.com
Sun Oct 19 17:16:24 EDT 2003


    >>> Now I want to put that data into the new database but the 'L's are
    >>> still there. What can I do?

    >>>>> c = ('a',200L)
    >>>>> print int(c[1])

    Ansgar> OK, that would work, if I would know what field contains an
    Ansgar> Integer or not...

Ansgar,

It's not clear to me why you're having a problem with this.  In the version
of MySQLdb I use (0.9.2), longs are passed through
MySQLdb.converters.Thing2Str before being folded into an SQL statement:

    def Thing2Str(s, d):
        """Convert something into a string via str()."""
        return str(s)

If s is a long, str(s) returns a string containing only digits in Python
2.1, 2.2 and 2.3.

Nonetheless, if things aren't working for you, you can add a custom
converter to your MySQLdb connection which maps longs to ints.  Try
something like this:

    def Long2Str(s, d):
        return str(int(s))

    import MySQLdb
    import MySQLdb.converters
    converter = MySQLdb.converters.conversions
    converter[long] = Long2Str

    conn = MySQLdb.Connection(..., conv=converter)

If you need help straight from the horse's mouth (Andy Dustman), your best
bet is to post a question to the help forum on the mysql-python project
website on SourceForge: <http://sf.net/projects/mysql-python>.

Skip





More information about the Python-list mailing list