And python is using that same version of SQLite3.dll? That is, pysqlite2 or sqlite3 or whatever version of the module you are using to interface to sqlite3.dll returns '3.8.6' when you do something like:
2014-10-04 10:19:52 [D:\Temp] >python Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import sqlite3 >>> sqlite3.sqlite_version '3.8.7' >>> sqlite3.version '2.6.0' >>> sqlite3.version is the version number of pysqlite ... >-----Original Message----- >From: sqlite-users-boun...@sqlite.org [mailto:sqlite-users- >boun...@sqlite.org] On Behalf Of Mark Halegua >Sent: Saturday, 4 October, 2014 10:11 >To: General Discussion of SQLite Database >Subject: Re: [sqlite] passing error messages to pysqlite > >and now the windows version, with sqlite 3.8.6 and a local database and >local code in the >same directory is doing the same, database locked. And yet, at the >command line I could >do an insert no problem. > >Mark > > >On Saturday, October 04, 2014 12:00:59 PM Mark Halegua wrote: >> Kieth, >> >> the database is not locked. It is a copy residing on the local hard >drive >> in the same directory as the python code and that version of sqlite3. >I >> was able to do an insert with the same sqlite3 in that directory as the >> code, so this behavior is somehow wrong. >> >> The two systems I've tested this on are both Linux, one is kubuntu >11.04 >> with sqlite3 version 3.7.4 the otehr is Linux Mint 17, KDE, and sqlite3 >> version 3.8.2 >> >> I'm about to test the code on a winxp vm with another local copy of the >> database and code. >> >> Mark >> >> On Saturday, October 04, 2014 09:39:35 AM Keith Medcalf wrote: >> > Well that would be because the database is locked. Is the version of >> > SQLite being used by Python the same version as the command line tool >is >> > using? What is the OS -- is the database stored somewhere that the OS >> > thinks you are not permitted to change files (feature of windows). >Do >> > you have another outstanding transaction that you have not commit or >> > rollback? >> > >> > Note rollback's are not automatic either, so after you get an error >trying >> > to commit, the transaction is still open and will be commit/rollback >again >> > next time your try to commit or rollback. >> > >> > Is the database file in use by something else? Do you have a busy >wait >> > timeout set? What Operating System are you running on? >> > >> > On Saturday, 4 October, 2014 08:44, Mark Halegua ><phanto...@mindspring.com> >said: >> > >Kieth, >> > > >> > >thanks for the info, however, I tested the following code on a LOCAL >copy >> > >of the database, >> > >one where at the sqlite3 command line I was able to do an insert >without >> > >problems, and yet, >> > >the python code returned the 'database is locked; error message in >the >> > >code (I used a >> > >wxpython messagebox widget to display the error). >> > > >> > >Why would it return a locked message in this case? >> > > >> > >Here's the code: >> > > def OnSave(self, event): >> > > self.dbupdated = True >> > > self.pub_title = self.pub_text.GetValue() >> > > self.pub_remarks = self.remarks_text.GetValue() >> > > print self.pub_title >> > > print self.pub_remarks >> > > # update relevant tables(s) >> > > self.cdata.execute('insert into publishers(publisher_name, >> > > >> > >remarks) values("test", "remarks");') >> > > >> > > try: >> > > self.database.commit() >> > > >> > > except sqlite.Error, dberr: >> > > wx.MessageBox(dberr.args[0], 'DB Warning', >> > > >> > >wx.OK) >> > > >> > > self.dbupdated = False >> > > >> > > # clear fields >> > > >> > > if self.dbupdated: >> > > self.pub_text.SetValue(' ') >> > > self.remarks_text.SetValue(' ') >> > > >> > > print 'dbupdated = ' , self.dbupdated >> > > print self.add >> > > self.add = False >> > > print self.add >> > > >> > >sqlite3 version 3.7.4 >> > > >> > >Mark >> > > >> > >On Friday, October 03, 2014 10:37:06 PM Keith Medcalf wrote: >> > >> Yes. pysqlite/sqlite3 in python tries to manage transactions for >you >> > > >> > >by >> > > >> > >> automatically starting them, and you need to commit them yourself. >> > > >> > >This is >> > > >> > >> controlled by the isolation_level attribute set on the connection >(can >> > > >> > >also >> > > >> > >> be set as a parameter when you open the connection). >> > >> >> > >> The default value is '' (an empty string). Other valid values are >> > >> 'IMMEDIATE', 'EXCLUSIVE' and None. Basically, pysqlite tries to >detect >> > > >> > >the >> > > >> > >> type of statement you are running and if it is a DML statement >(select, >> > >> insert, update, delete) it automatically begins a transaction for >you >> > > >> > >if >> > > >> > >> one is not in progress by first doing a 'BEGIN '+isolation_level. >If >> > > >> > >the >_______________________________________________ >sqlite-users mailing list >sqlite-users@sqlite.org >http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users