On Apr 8, 2005, at 9:27 AM, Robert Simpson wrote:
Actually if you need to re-use the prepared statement, it's much more
efficient to simply call sqlite_reset() on it instead of finalize.
As long as the statement is not currently step()'ing and is in the
reset
state, the database will not be locked.
Example:
select_stmt = db.execute("SELECT * FROM people")
# use some, but not all of the rows in select_stmt
-->db.reset(select_stmt)
create_stmt = db.execute("CREATE TABLE other (a,b)") # error:
--># step through the select_stmt again
Robert
Thank you for the responses.
I am confused why the following works:
###
db.do("create table people (name, bday)")
db.do("create table hey (a, b)")
db.do("insert into people values ('Bill', '5/5/1969')")
s = db.execute('select * from people')
db.do("insert into hey values (1,2)")
# insert works, but create table does not
s.finish # finalizes statement
###
db.do() just executes a statement and finalizes it right away.
-Charlie
-----Original Message-----
From: Paolo Vernazza [mailto:[EMAIL PROTECTED]
Sent: Friday, April 08, 2005 9:09 AM
To: sqlite-users@sqlite.org
Subject: Re: [sqlite] create table question
Charles Mills wrote:
I am trying to create a table after creating a select statement
which selects records from an existing table. Is this
possible? I
get a SQLITE_LOCKED / "database table is locked" error when I
attempt this.
In psuedo code the logic is as follows:
select_stmt = db.execute("SELECT * FROM people")
# use some, but not all of the rows in select_stmt
create_stmt = db.execute("CREATE TABLE other (a,b)") # error:
database table is locked
Why does this happen?
Anyway around this?
You must finalize select_stmt before running again db.execute
Right. I have an instance where I would like to keep the
select_stmt
_open_ (or not finalized) while I create a new table. Is
this possible?
While you are reding the DB, you can't update it, sqlite support many
simultaneous readers but only one write; so you can't create
a new table
while your select statement is running.
I thin you must do somthing like this:
select_stmt = db.execute("SELECT * FROM people")
# use some, but not all of the rows in select_stmt
sqltorun += "CREATE TABLE other (a,b);"
select_stmt.finalize()
create_stmt = db.execute(sqltorun)
Paolo