ZMySQLDA always converts columns of MySQL type int(11) (the normal 'integer' field type) to Python Long values. The reason this is done is that the MySQL integer data type can hold values larger than the normal Python integer. Python 1.5.2 and earlier had a bug that caused a Python long to print out with the L suffix; this bug was fixed in 2.0 (and maybe 1.6, although I haven't tried it). The conversion table in ZMySQLDA can be found in lib/python/Products/ZMySQLDA/db.py, in the DB class: conv={ FIELD_TYPE.TIMESTAMP: _mysql_timestamp_converter, FIELD_TYPE.TINY: int, FIELD_TYPE.SHORT: int, FIELD_TYPE.LONG: long, FIELD_TYPE.FLOAT: float, FIELD_TYPE.DOUBLE: float, FIELD_TYPE.LONGLONG: long, FIELD_TYPE.INT24: int, FIELD_TYPE.YEAR: int, FIELD_TYPE.DATETIME: DateTime, FIELD_TYPE.DATE: DateTime, FIELD_TYPE.TIME: DateTime } (from ZMySQLDA-2.0.4) If these L's are causing you trouble, you can edit this code to show int in place of long for the FIELD_TYPE.LONG and FIELD_TYPE.LONGLONG. Something like this external method might also work, if you call it before making any SQL queries: def patch_ZMySQLDA_for_ints(self): from Products.ZMySQLDA.db import DB from _mysql import FIELD_TYPE DB.conv[FIELD_TYPE.LONG] = int DB.conv[FIELD_TYPE.LONGLONG] = int Note that this method would have to be called at every time your server was started, or for safety's sake before each query was run. -Randy
-----Original Message----- From: Paul Zwarts [mailto:paul.zwarts@oratrix.com] Sent: Thursday, March 15, 2001 8:12 AM To: Daniel Corrêa de Azevedo Cc: 'zope@zope.org' Subject: Re: [Zope] formatting problem...
Hi Daniel,
I have had similar problems with MySQL... What I use to get around it is to send it through the integer module. You'll find this also handy for converting strings that only contain numbers and dates to floats and yadda yadda....:
<dtml-var "_.int(varname)">
Anyone got a better one? Or rather, explain why MySQL translates everthing as long integers? Is this ALWAYS the case when defining a dbase field as INT4? Cheers, Paz
Daniel Corrêa de Azevedo wrote:
Hello you all. I´m having problem in using FMT atribute of the
DTML-VAR tag in dtml
methods. The situation is that when I receive some integer data from a MYSQL database, I get it with a L sufix. That makes it necessary to format the data with <dtml-var key fmt="%d">. Now, the problem is that, sometimes, I need to keep on passing the data over to a few dtml methods, and when ever I need to reformat the data, I get an erro message: " Ilegal argument type for built-in operation.". I need to reformat because the data in the other dtml-methods in the sequece may be being received from the MYSQL database. How coud I reformat the data using <dtml-var key FMT="????">, even if it has already been formated by <dtml-var key fmt="%d">?
Thanks,
Daniel C. Azevedo
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
participants (1)
-
Randall F. Kern