4 messages in com.googlegroups.sqlalchemy[sqlalchemy] VIEW names?
FromSent OnAttachments
Martin25 Jan 2008 16:24 
Michael Bayer25 Jan 2008 16:41 
Barry Hart25 Jan 2008 17:38 
Kevin Cole26 Jan 2008 08:12 
Subject:[sqlalchemy] VIEW names?
From:Martin (mart@web.de)
Date:01/25/2008 04:24:59 PM
List:com.googlegroups.sqlalchemy

Hello,

since I didn't find a direct way to create a VIEW within SQLalchemy v0.4, I use the "text"-feature to do that with a SQL/DDL statement, which is maybe not elegant, but works...

Is there a way to get information about Views? (Which Views exist and which columns do they provide?)

SQLalchemy maintains a list of table names, but this list seems not to include Views ("virtual tables") (at least with the test code at the bottom) and I didn't find any view_* related list or method. AFAIK, SQL doesn't offer this information and I don't want to introduce DBMS specific code to access special system tables. (It'll be great if the same code works with SQLite, MySQL, Postgresql...) The metadata.table_iterator() at the end of the test-code will print "view2" after a Table was added to the metadata with the known name 'View2'.

#! /usr/bin/env python import sqlalchemy print sqlalchemy.__version__ import datetime engine = sqlalchemy.create_engine('sqlite:///testview.db', echo=True) metadata = sqlalchemy.MetaData() metadata.bind=engine table1 = sqlalchemy.Table('Table1', metadata, sqlalchemy.Column('id', sqlalchemy.Integer, sqlalchemy.Sequence('id1_seq'), primary_key=True), sqlalchemy.Column('timestamp', sqlalchemy.DateTime, default=datetime.datetime.now()), ) table2 = sqlalchemy.Table('Table2', metadata, sqlalchemy.Column('Table1_id', sqlalchemy.Integer, sqlalchemy.ForeignKey("Table1.id")), sqlalchemy.Column('date', sqlalchemy.Date, default=datetime.date.today()), ) metadata.create_all(engine) conn = engine.connect() try: conn.execute(sqlalchemy.text("CREATE VIEW View2 AS SELECT * FROM Table2 INNER JOIN Table1 ON Table2.Table1_id=Table1.id")) except sqlalchemy.exceptions.OperationalError, strerror: print "could not create View2: ", strerror print "engine.table_names():\t", engine.table_names() if not engine.has_table("View2"): print "View2 not found within table_names!" for t in metadata.table_iterator(): print t view2 = sqlalchemy.Table('View2', metadata, autoload=True) conn.execute(table1.insert(), id=1) conn.execute(table2.insert(), Table1_id=1) result=conn.execute(sqlalchemy.select([view2])) row=result.fetchone() print row conn.close() print "engine.table_names():\t", engine.table_names() for t in metadata.table_iterator(): print t