Sounds good. I will try concating strings for Postgres - see if that works. 
Seems like it should maybe work from a few posts I read.

I tried out the insert on SQLite by zipping the dict keys to values - works 
great!

I tried out the triple-quoting of the strings through SQLAlchemy but that 
did not either. It seems that that may have a chance with the psycopg2 
driver.

Thanks much.

Mono

On Monday, September 23, 2013 6:39:33 AM UTC-4, Simon King wrote:
>
> A quick google for "psycopg multiple statements" doesn't turn up 
> anything useful, so I suspect you are going to be out of luck. And 
> unless there are more database drivers than sqlite that support an 
> "executescript" method, it doesn't seem likely that it'll get added to 
> SQLAlchemy either... 
>
> For batch loading of data, you could look at the examples at 
>
> http://docs.sqlalchemy.org/en/rel_0_7/core/tutorial.html#executing-multiple-statements
>  
>
> Simon 
>
> On Mon, Sep 23, 2013 at 6:54 AM,  <monosij...@gmail.com <javascript:>> 
> wrote: 
> > Hi Simon - 
> > 
> > Great! The executescript from sqlite worked great. I had not seen that. 
> I 
> > was able to execute indices and fks as well. 
> > 
> > Is the same not possible from SQLAlchemy then? Would version 0.9 have 
> it? I 
> > don't know if Michael is planning on having this feature. 
> > 
> > Meaning even for PostgreSQL or MySQL? Would I then have to find another 
> > driver (such as for SQLite) that would do this? 
> > 
> > For bulk loading of data then would SQLAlchemy's ORM capabilities be the 
> > best than executing SQL in bulk load operations. 'Bulk' is relative 
> term, 
> > but 10K - 100K records and trying not to resort to ETL tools. 
> > 
> > Look forward to your reply and thanks for your help. 
> > 
> > Mono 
> > 
> > On Sunday, September 22, 2013 5:30:37 PM UTC-4, Simon King wrote: 
> >> 
> >> The documentation for the Python sqlite driver specifically says: 
> >> 
> >> """ 
> >> execute() will only execute a single SQL statement. If you try to 
> execute 
> >> more than one statement with it, it will raise a Warning. Use 
> >> executescript() if you want to execute multiple SQL statements with one 
> >> call. 
> >> """ 
> >> 
> >>   (http://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute) 
>
> >> 
> >> ("raise a Warning" is a slightly vague statement, but it appears that 
> it 
> >> is actually an exception) 
> >> 
> >> SQLAlchemy's conn.execute eventually calls sqlite's Cursor.execute, so 
> has 
> >> the same limitations. I don't know, but I suspect that postgres will be 
> the 
> >> same. 
> >> 
> >> I think you need to find a way to split your scripts up into individual 
> >> statements that you can run one at a time. 
> >> 
> >> Hope that helps, 
> >> 
> >> Simon 
> >> 
> >> On 21 Sep 2013, at 16:14, monosij...@gmail.com wrote: 
> >> 
> >> > Hi Michael and Simon - Thank you for your responses and help. Sorry I 
> >> > should have provided more details. 
> >> > 
> >> > Putting in the raise gave this error trace blow. 
> >> > 
> >> > It says it cannot execute more than one line at a time. It says the 
> same 
> >> > even if I do not have it in a transaction block, but in this case I 
> do. 
> >> > 
> >> > Meaning if just do a: conn.execute(scriptFile) - it says cannot 
> execute 
> >> > more than 1 statement at a time, which is the same error I am getting 
> with 
> >> > the transaction. 
> >> > 
> >> > ... 
> >> > In this case I do a try catch as in: 
> >> > conn = engine.connect() transact = conn.begin() try: 
> >> > conn.execute(scriptFile) transact.commit() except: raise 
> transact.rollback() 
> >> > 
> >> > With scriptFile being just a string with 4 CREATE TABLE statements 
> with 
> >> > 3 - 10 fields each. 
> >> > The scriptFile does have '/n' and '/t' (newlines/tabs) in each line 
> of 
> >> > fields in the CREATE TABLE statements. 
> >> > 
> >> > And as I said before I can execute the same statements (with the /n 
> and 
> >> > /t) 1 at a time with either the sqlalchemy or sqlite3 drivers, no 
> problem. 
> >> > Eventually I do want to run these in PostgresSQL so I assume it is 
> not a 
> >> > SQLite3 issue. I do need to run on SQLite3 as well. 
> >> > 
> >> > Btw, in my use case, while I can run the CREATE TABLEs 1 at a time 
> >> > eventually I do have to run CREATE INDEXES / FKs / INITIAL DATA LOAD 
> >> > multiple at a time, so I would like to get the multiple statements 
> working 
> >> > right. 
> >> > ... 
> >> > This is the error raise generates - at the end it says it can only 
> >> > execute 1 statement at a time but it s warning. 
> >> > 
> >> > 2013-09-21 10:47:35,543 INFO sqlalchemy.engine.base.Engine BEGIN 
> >> > (implicit) 
> >> > 2013-09-21 10:47:35,543 INFO sqlalchemy.engine.base.Engine 
> >> > 
> >> > ... then shows the CREATE TABLE statements ... 
> >> > 
> >> > 2013-09-21 10:47:35,543 INFO sqlalchemy.engine.base.Engine () 
> >> > Traceback (most recent call last): 
> >> >   File "dbms.model/python3/Controller.py", line 54, in <module> 
> >> >     if __name__ == "__main__": main() 
> >> >   File "dbms.model/python3/Controller.py", line 50, in main 
> >> >     controller.initiateEnvironment() 
> >> > 
> >> > ... lines from traceback in my code 
> >> > ... end of traceback from SQLAlchemy driver below ... 
> >> > 
> >> >   File 
> >> > "/space/development/python/dbms.model/python3/DBMS/ExecutorSQL.py", 
> line 47, 
> >> > in executeCreateOnSQLite2 
> >> >     conn.execute(scriptFile) 
> >> >   File 
> >> > "/usr/local/lib/python3.3/dist-packages/sqlalchemy/engine/base.py", 
> line 
> >> > 662, in execute 
> >> >     params) 
> >> >   File 
> >> > "/usr/local/lib/python3.3/dist-packages/sqlalchemy/engine/base.py", 
> line 
> >> > 805, in _execute_text 
> >> >     statement, parameters 
> >> >   File 
> >> > "/usr/local/lib/python3.3/dist-packages/sqlalchemy/engine/base.py", 
> line 
> >> > 874, in _execute_context 
> >> >     context) 
> >> >   File 
> >> > "/usr/local/lib/python3.3/dist-packages/sqlalchemy/engine/base.py", 
> line 
> >> > 1027, in _handle_dbapi_exception 
> >> >     util.reraise(*exc_info) 
> >> >   File 
> >> > "/usr/local/lib/python3.3/dist-packages/sqlalchemy/util/compat.py", 
> line 
> >> > 183, in reraise 
> >> >     raise value 
> >> >   File 
> >> > "/usr/local/lib/python3.3/dist-packages/sqlalchemy/engine/base.py", 
> line 
> >> > 867, in _execute_context 
> >> >     context) 
> >> >   File 
> >> > 
> "/usr/local/lib/python3.3/dist-packages/sqlalchemy/engine/default.py", line 
> >> > 326, in do_execute 
> >> >     cursor.execute(statement, parameters) 
> >> > sqlite3.Warning: You can only execute one statement at a time. 
> >> > ... 
> >> > 
> >> > Hope this helps. 
> >> > Please let me know if you need anything else. 
> >> > Thank you again for all your help. 
> >> > 
> >> > Mono 
> >> > 
> >> > 
> >> > On Friday, September 20, 2013 7:07:57 PM UTC-4, Simon King wrote: 
> >> > 
> >> > On 20 Sep 2013, at 08:15, monosij...@gmail.com wrote: 
> >> > 
> >> > > 
> >> > > I am trying to create multiple tables from a set of 'create table' 
> >> > > scripts.The set of scripts are in a list and I am executing as 
> below. 
> >> > > 
> >> > > The scripts create tables, all scripts tested and work through the 
> >> > > sqlite3 driver fine - one at a time. 
> >> > > 
> >> > > However, through the sqlarchemy driver when I try as below - only a 
> >> > > few of the tables get created, ie the script gets executed. 
> >> > > 
> >> > > The scripts (for the tables) always come in the same order but 
> >> > > randomly a few gets executed, somes 1st,2nd or 1st,3rd; etc. 
> >> > > 
> >> > > The same scripts iterated from the same list get created fine using 
> >> > > sqlite3 driver as mentioned, with no issues. 
> >> > > 
> >> > > However only a few of the tables get when I try the following, and 
> >> > > then there is an error which causes the rollback from the script 
> that failed 
> >> > > and it exits. 
> >> > > 
> >> > > Any suggestions will be very appreciated as I actually plan to use 
> the 
> >> > > scripts for Postgres eventually. 
> >> > > 
> >> > > Btw I also try executing them all together by trying to execute the 
> >> > > list - that also failed. Eventually i would like to try and bulk 
> execute if 
> >> > > possible, but not urgent for 'create table' 
> >> > > 
> >> > > Thank you for your help. 
> >> > > 
> >> > > Mono 
> >> > > 
> >> > > ... 
> >> > > dbms = 'sqlite:////dataSpace/sqlite3/test.sqlite3' 
> >> > > engine = create_engine(dbms, echo = True) 
> >> > > t = conn.begin() 
> >> > > try: 
> >> > >     for script in scripts: 
> >> > >         print (script) 
> >> > >         conn.execute(script)   # I tried executing scripts all 
> >> > > together as well but failed. 
> >> > >         t.commit()    # I tried commit outside the for as well 
> >> > >     executed = True 
> >> > > except: 
> >> > >     t.rollback() 
> >> > > … 
> >> > > 
> >> > 
> >> > If your script really looks like this, then you are suppressing any 
> >> > error messages that might be happening during the import with your 
> "except" 
> >> > clause. Trying putting a bare "raise" after the t.rollback() so that 
> your 
> >> > script aborts after an exception. 
> >> > 
> >> > Simon 
> >> > 
> >> > 
> >> > -- 
> >> > You received this message because you are subscribed to the Google 
> >> > Groups "sqlalchemy" group. 
> >> > To unsubscribe from this group and stop receiving emails from it, 
> send 
> >> > an email to sqlalchemy+...@googlegroups.com. 
> >> > To post to this group, send email to sqlal...@googlegroups.com. 
> >> > Visit this group at http://groups.google.com/group/sqlalchemy. 
> >> > For more options, visit https://groups.google.com/groups/opt_out. 
> >> 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups 
> > "sqlalchemy" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an 
> > email to sqlalchemy+...@googlegroups.com <javascript:>. 
> > To post to this group, send email to 
> > sqlal...@googlegroups.com<javascript:>. 
>
> > Visit this group at http://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/groups/opt_out. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to