[Twisted-Python] SELECT returns no results without conn.commit()
Franz Schwartau
franz at electromail.org
Wed Jun 4 03:03:18 MDT 2014
Hi Glyph!
On Tue, Jun 03, 2014 at 11:57:45AM -0700, Glyph Lefkowitz wrote:
> On Jun 3, 2014, at 6:31 AM, Franz Schwartau <franz at electromail.org> wrote:
>
> Hi!
>
> I'm trying to extend ppolicy (http://bimbo.fjfi.cvut.cz/ppolicy) a bit.
> ppolicy uses the twisted framework. On CentOS 6.5 version 8.2.0 of
> twisted is installed.
>
> I should note that Twisted 8.2.0 is 6 years old at this point, so if you
> can't upgrade Twisted there might not be much we can do for you :).
>
> I wrote a separate module called LookupSessionDB:
>
> http://pastebin.com/u4TMNhpd
>
> It looks up some values from a database table. It does some efforts to
> handle reconnect properly.
>
> If called a second time and more the SELECT statement returns no rows
> (line 138) if "conn.commit()" is missing in line 125. If "conn.commit()"
> is called after obtaining a database connection "rows =
> cursor.fetchall()" (line 138) returns the expected results.
>
> The module inserting the records calls "conn.commit()" after INSERT. If
> I execute the same SELECT statement in a separate mysql client the
> results are displayed.
>
> This is quite confusing. Any idea what's going on?
>
> Can you simplify this question somewhat? There's a lot of SQL in here,
> it's missing a required dependency ("Base") and I suspect that this is
> really a MySQL question and not a Twisted question. It would be helpful
> if you could provide a complete schema so we could run your code, in the
> style of http://sscce.org/.
> -glyph
Thanks for your answer.
I know twisted 8.2.0 is quite old. Unfortunatly there are no newer RPM in RHEL/CentOS or even EPEL.
I could provide the complete code. But it would be laborious to set up everything. You'd need postfix, ppolicy, mysql, etc. It would be easier (for you) if I'd set up a VM.
IMHO it's related to twisted. If I replace adbapi.ConnectionPool() with another connection method it works. I used mysql.connector.connect(pool_name = "ppolicy", pool_size = 5, ...) and MySQLdb.connect().
Best regards
Franz
More information about the Twisted-Python
mailing list