why my cur.executescript can not run?

Peter Otten __peter__ at web.de
Thu Apr 24 11:10:56 EDT 2014


length power wrote:

> When cur.execute be used, i get right output.
> 
> import sqlite3
> con=sqlite3.connect(":memory:")
> cur=con.cursor()
> sql1="attach database 'g:\\workspace\\data\\Cinfo.sqlite' as Cinfo;"
> sql2="select * from Cinfo.ipo;"
> cur.execute(sql1)
> cur.execute(sql2)
> con.commit()
> x=cur.fetchall()print(x)
> 
> When i change it into cur.executescript, nothing can get.
> 
> import sqlite3
> con=sqlite3.connect(":memory:")
> cur=con.cursor()
> sql_script="""
> attach database 'g:\\workspace\\data\\Cinfo.sqlite' as Cinfo;
> select * from Cinfo.ipo;"""
> cur.executescript(sql_script)
> con.commit()
> x=cur.fetchall()print(x)
> 
> I want to know why?

The difference has nothing to do with your specific code, as the following 
minimal example shows:

>>> import sqlite3
>>> cs = sqlite3.connect(":memory:").cursor()
>>> cs.execute("select 42;").fetchall()
[(42,)]
>>> cs.executescript("select 42;").fetchall()
[]

The docs don't say so explicitly, but my guess is that executescript() is 
meant to execute sql statements for their side effect (like populating a 
database) only, not to return a result. Please file a bug report if you want 
a clarification in the docs.





More information about the Python-list mailing list