[Zope] Two mysql / timestamp related fixes
Gaute Amundsen
gaute at div.org
Fri Mar 9 09:15:41 EST 2007
On Friday 09 March 2007 09:40, Tino Wildenhain wrote:
> Gaute Amundsen schrieb:
> > On Thursday 08 March 2007 17:27, Tino Wildenhain wrote:
> >> Gaute Amundsen schrieb:
> >>> Hi.
> >
> > <snip>
> >
> >>> 1 )
> >>> First I got a ValueError 'query' when using a very simple zsql method.
> >>> (consisting of only "<dtml-var sql >")
> >>
> >> Thats a very bad idea. Better make zsql methods
> >> for every query
> >
> > I know the orthodoxy :-/
> > I'd rather have a proper DB library, (or model layer, if you will)
> > and build my SQL in python.
>
> So you want to use SQLAlchemy? Feel free to write a product
> as wrapper :-)
Hm.. have never quite gotten around to writing my first product.
Looks like a very nice candidate, but no promises :)
> > To build anything complex or generalized in dtml is a PAIN.
>
> Is it? Can you come up with examples?
>
tabell:string
felter:list
INSERT INTO <dtml-var tabell sql_quote> SET
<dtml-in expr="felter.keys()">
<dtml-let key=sequence-item value="felter[key]">
<dtml-unless sequence-start>,</dtml-unless>
<dtml-var key sql_quote> =
<dtml-if expr="same_type(value, 1)">
<dtml-sqlvar value type="int">
<dtml-elif expr="same_type(value, 1.0)">
<dtml-sqlvar value type="float">
<dtml-else>
<dtml-sqlvar value type="string">
</dtml-if>
</dtml-let>
</dtml-in>
<dtml-var sql_delimiter>
SELECT LAST_INSERT_ID()
and that is not _really_ complex is it?
There's the whole sqlgroup thing.
dtml is after all depreciated, so I can see no reason to learn it as torougly
as ZSQLMethods obviously requires when I can use python instead.
> > And a sea of too specific templates is even worse.
>
> Well from some level of complexity you could also use
> database functions. But if its so complex, why using
> MySQL?
>
Don't see quite what you mean here, but it would be just the same problems
with PGsql.
> >> instead of
> >> rebuilding your own (obviously not working)
> >> templating for SQL.
> >
> > I's not a template, it's a wrapper to get around the whole mess.
> > A hack in fact ;)
> >
> > If a template this simple "<dtml-var sql >" is "obviously not working"
> > then it is ZSQLMethods that have a problem, not me.
>
> No, the content of your variable sql is wrong :-)
> <dtml-var sql> would indeed work if it contains valid sql
> code.
It did not.
That was the whole point of this mail.
The method was "<dtml-var sql >" and the sql was "select * from foo"
care to spot the invalid code in that?
> > (it's working fine now.)
> >
> >> Quoting is done automatically
> >> when you use <dtml-sqlvar ...>
> >
> > I can use sql_quote when I need to, thankyou.
>
> this does not need to work identical - but current
> adaptors indeed do their handmade quoting.
>
> > The only thing that I worry about is transaction support.
> > "insert foo; select last_inserted" works when built inside the template
> > with dtml, but not with the exact same statement passed to this
> > "wrapper". Probably another bug, but I have not taken time to dig
> > properly into it yet.
>
> Yes, MySQL doesnt want ; as sql-delimiter. It rather wants \0 and sql
> methods hack around it for you if you put the template there.
Hm.. interesting, but I looked into it a bit, and I can't find where this
happens.
I see that ZRDB/DA.py does: argdata['sql_delimiter']='\0'
Tried a "query = query.replace(';','\0')" at line 444, but to no effect :)
Suggestions?
I guess this could be a problem with LAST_INSERT_ID, forcing me to use
ZSQLMethods, or dome ugly workaround for inserts, where I need the id
afterwards.
> Transactions are maintained thrughout your session (read: request)
> so there is no need to squeeze it all into one ZSQL call. Every
> subsequent ZSQL call inside your request will be in the same
> database transaction.
>
No plans to squeze it all into one huge SQL statement. Now THAT would be ugly!
but python errors does not trigger rollback it seems. I guess only sql errors
would do that?
regards
Gaute
More information about the Zope
mailing list