Hey Phillip!
First, you must understand a simple concept: when you declare a table in SA, either declarative or traditionally, you're already sayin' to the SA engine that "there are tables". Then, you can create them (if they do not exist), populate them and drop'em. You can even specify your own SQL code using SA's dialects. Let me explain it, well, with pseudo-code (I'm sorry, I'm at home and I don't have [at least, recent] SA code around here): -- class First(object): pass class Second(object): pass my_first_table = Table('first', metadata, ....) my_second_table = Table('second', metadata, ...) mapper(First, my_first_table) mapper(Second, my_second_table) ## # at this point, SA knows there is 2 tables, and they're mapped to 2 objects ## my_engine = create_engine('my-adapter://...') # the connection engine, example: "sqlite://", which is an in-memory instance (good for testing) if 'create' in sys.argv: # now, we want to specifically CREATE everything we mapped metadata.create_all(my_engine) # in here, SA creates tables, constraints; and so on. if you want something like "drop table if exists ...", I think you must specify it in your dialect, use events or, well, wait for someone here with more info about it :) I don't know if SA checks for alter columns, except if you use its functions for it # by now, all we do is fun! # creating objects first_1st = First() second_1st = First() session.add([first_1st, second_1st]) # in here, you put your mapped objects in your session object session.commit() # now, they are turn into INSERT statements (99,999% of the time, lol) # by now, the first table is populated first_2nd = Second() second_2nd = Second() # but the second table nope (we need to tell the engine's session that we want it to do it, right?) # so, what to expect? assert(len(session.query(First).all()), 2) assert(len(session.query(Second).all()), 0) session.add([first_2nd, second_2nd, Second()]) # they are in session! are they in the database? "yes", you might say, with you do not want rollbacks and "autocommit" is True assert(len(session.query(Second).all()), 0) session.commit() # now what do you have? 2 rows in the "first" table print session.query(First).all() # and 3 rows in the "second" table print session.query(Second).all() #checking it assert(len(session.query(First).all()), 2) assert(len(session.query(Second).all()), 3) # ok, now I want to drop them all if 'drop' in sys.argv: metadata.drop_all(engine) # do not forget: metadata have *all* your SA tables [and so on] in it print 'done!" -- Please, if this is not what you're asking (and if you're already know that), let me know a little specifically your problem. I like to help, and we're all students :D Kind regards, Richard. Em 2013-04-18 19:30, Philipp Kraus escreveu: > Hi Gerd, > I have taken a look to the examples, but I don't understand, in which way I can use the transaction with the create_all option. A short code excerpt: > > engine = sqlalchemy.create_engine(env["connection"], echo = env.get("DATABASE_VERBOSE", False) ) > > metadata = sqlalchemy.MetaData() > > connect = engine.connect() > > transaction = connect.begin() > > for i in mytables : > > sqlalchemy.Table( i, metadata, *tablestructure ) > transaction.commit() > connection.close() > IMHO I must push the transaction object to the Table call, but how can I do this? > Thx > Phil > > Am Donnerstag, 18. April 2013 23:23:45 UTC+2 schrieb Richard Gerd Kuesters: > >> Hello Phillip :) >> >> IMHO, your best options are the SA examples (in the source code) folder and, for further abstractions, you could check SA test units :) >> >> Works great for me! > > -- > 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?hl=en [1]. > For more options, visit https://groups.google.com/groups/opt_out [2]. -- RICHARD GERD KUESTERS Coordenador Tecnologia - Produtos ------------------------- HUMANTECH GESTO DO CONHECIMENTO +55 (47) 3028-3113 WWW.HUMANTECH.COM.BR Links: ------ [1] http://groups.google.com/group/sqlalchemy?hl=en [2] 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?hl=en. For more options, visit https://groups.google.com/groups/opt_out.