[Zope-DB] sql query works in database connector but not in ZSQL method

robert rottermann robert at redcor.ch
Wed Jan 17 11:18:05 EST 2007


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Kevin Campbell schrieb:
> On Wed, Jan 17, 2007 at 03:42:04PM +0100, robert rottermann wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Hi there,
>>
>> I try the following statement:
>> CALL selectVertexProperties(1, @error2)
>>
>> when I execute this directly in the test "window" of the database
>> connection, it works fine.
>> when i execute the same line in the test window of a ZSQL Method
>> then I get an error:
>>
>> Error, Products.mxODBCZopeDA.ZopeDA.ReplayTransaction: OperationalError
>> on : ('HYT00', 2014, "[unixODBC][MySQL][ODBC 3.51
>> Driver][mysqld-5.0.26]Commands out of sync; you can't run this command
>> now", 6113) SQL used:
>>
>> CALL selectVertexProperties(1, @error2)
>>
>> when I call this method from plain python, it works fine also.
>>
>> Any pointers what could be the reason would be greatly appreciated.
> 
> Robert,
> 
> Can you give an example of how you call this in plain python? It may be
> that in using plain python you are starting a new transaction, and there
> are previous sql commands which are causing problems. Perhaps some more
> details of the sql statements issued would be helpful also.
> 
> Kevin
> 
thanks for your answer,
 here is what I do in a plain python script (using MySQLdb):

def findUser(username):
    query = "CALL selectVertexIdFromLogin('%s', @id, @error1);" \
            "CALL selectVertexProperties(@id, @error2)" % username
    cursor.execute(query)
    cursor.nextset()
    print cursor.fetchall()

this is what I try to do in a method in a Zope product of ours:
    def getUserDataById(self, userid=''):
        "return base user data for user. if userid is not given use
looged in user"
        db = self.redscout_tool.scout_connection()
        sql_delimiter = self.sql_delimiter
        if not userid:
            userid = self.portal_membership.getAuthenticatedMember().getId()
        query = "CALL selectVertexIdFromLogin('%s', @id, @error); select
@error, @id" % userid
        result = db.query((query).replace(';', sql_delimiter))
        if result:
            result = result[1][0]
            error = int(result[0])
            if error:
                "handle error"
                return 'fehler'
            else:
                dbid = int(result[1])
                query =  "CALL selectVertexProperties(%s, @error2)" % dbid
- ----->>         result = db.query((query).replace(';', sql_delimiter))
                return result


thanks for your help
robert
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org

iD8DBQFFrkw9GaryJ0T9kUYRArRdAJ9KR+vSS8oF8zIdmkSXEdBJ3d4p9wCfaVtb
e1vDt07FPzJMYh0T4PqgEl4=
=NbWY
-----END PGP SIGNATURE-----


More information about the Zope-DB mailing list