[Zope] RE: ZMySQLDA and aggregate functions on Win

Markus Kemmerling markus.kemmerling@mediaweb.at
Mon, 15 Jan 2001 12:12:09 +0100


Thank you Dave for your answer. But what do you mean by you don't expect a SELECT returning a number to work?
The error you got clearly is a mysql syntax error: If I have a table 'shop' and make a SELECT on 'show' I really wouldn't expect that to work ;-)
But I don't get any mysql error, I get a python error.

Let me repeat my problem and try to be a little bit more precise (I use your example):

SELECT COUNT(*) FROM show GROUP BY article;

works from the mysql command line, works from within Zope on linux, but breaks from within zope on windows. SELECT COUNT(*) FROM show; works from within Zope on windows, too.

So the problem is to have a SELECT with COUNT() and GROUP BY-clause from within Zope on Windows. Since it works on the mysql command line, it is definitely not an SQL error.

I use Zope 2.2.4, mysql 3.23gamma, ZMySQLDA 1.1.3 and the libmySQL.dll linked from the HowTo explaining the installation of ZMySQLDA on Win32.

The error I get is of type 'KeyError' with value 'unhandeld' and occurs on line 191 of ZMySQLDA's db.py. This and the next lines read as follows:

        for d in desc:
            item={'name': d[0],
                  'type': defs[d[2]],
                  'width': d[3],
               }
            func(item)

where 'desc' is the fieldlist of the result set returnded by the query and 'defs' is some kind of type-mapping defined at the top of db.py, that I don't really understand:

    defs={
        "short": "i", "long": "i", "char": "s", "double": "n", "decimal": "n",
        "float": "n", "tiny blob": "t", "medium blob": "t", "long blob": "t",
        "blob": "t", "date": "d", "time": "s", "datetime": "d",
        "timestamp": "d", "varchar": "t", "string": "t",
        }

The following little ugly hack makes my query work:

        for d in desc:
            try:
                item={'name': d[0],
                      'type': defs[d[2]],
                      'width': d[3],
                   }
                func(item)
            except KeyError:
                item={'name': d[0],
                      'type': 'i',
                      'width': d[3],
                   }
                func(item)

So it seems to me that COUNT returns some field-type unknown to 'defs'. (What still confuses me is, that this only happens in combination with a GROUP BY-clause.)

I wonder what's the value of d[2] for the COUNT()-column, but since I am quite new to python and Zope I still don't know how to debug.

I also wonder if anybody running Zope with mysql on windows can reproduce this error. Or maybe someone with a good knowledge of ZMySQLDA and the python mysql-module has some hint?

Sorry that this message got so long ...

Markus Kemmerling

> This is curious to me - I tried this on my Linux platform from 
> mysql and it
> doesn't work.
> Perhaps I misunderstand what you are trying to do:
> 
> SELECT COUNT(*) FROM mytable - returns a number - so I really don't expect
> it to work.
> 
> I have a table - shop and a column in that table - article:
> 
> mysql> select count(*) from show group by article;
> ERROR 1064: You have an error in your SQL syntax near 'show group by
> article' at line 1
> 
> Sorry if I misunderstand what you are trying to do -
> 
> =================================
> Dave Woolston   davew@digicool.com
> Digital Creations  www.digicool.com
> (716) 262-4715
> 
> 
> > I have a problem with ZMySQLDA and aggregate functions in 
> combination with
> > grouping on Windows.
> > When I say:
> >   SELECT COUNT(*) FROM mytable GROUP BY myfield;
> > I get an KeyError 'Unhandeld'.
> >
> >    SELECT COUNT(*) FROM mytable;
> > works fine, so does
> >   SELECT myfield FROM mytable GROUP BY myfield;
> > but not the combination of both.
> > Also on a linux machine the error doesn't occur. Of course I tested the
> > queries from the mysql command line.
> >
> > Any help?
> >
> > Markus Kemmerling
> 
>