Hi everyone,

I am new to sqlalchemy and figuring out whether it is right for my
project. What I am looking for is the ability to change classes and
tables on the flight, with as much freedom as possible, potentially
having metaclasses figuring out the difference between versions and
updating the database accordingly. Additionally I would like to import
databases and automatically generate class definitions. Some code I
tried:

<code>
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relation, sessionmaker

Base = declarative_base()

def Init(self, title=None, year=None):
    self.title = title
    self.year = year
def Repr(self):
    return "Movie(%r, %r, %r)" % (self.title, self.year,
self.director)

Movie = type("Movie", (Base,),{'__tablename__': "movies",
                    "id":Column(Integer, primary_key=True),
                    "title": Column(String(255), nullable=False),
                    "year": Column(Integer),
                    "directed_by": Column(Integer,
ForeignKey('directors.id')),
                    "director": relation("Director", backref='movies',
lazy=False)})
setattr(Movie, "__init__", classmethod(Init))
setattr(Movie, "__repr__", classmethod(Repr))


class Director(Base):
    __tablename__ = 'directors'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False, unique=True)

    def __init__(self, name=None):
        self.name = name

    def __repr__(self):
        return "Director(%r)" % (self.name)

engine = create_engine('sqlite:///meta.db', echo=True)
Base.metadata.create_all(engine)

if __name__ == "__main__":
    Session = sessionmaker(bind=engine)
    session = Session()

    m1 = Movie("Star Trek", 2009)
    m1.director = Director("JJ Abrams")

    d2 = Director("George Lucas")
    d2.movies = [Movie("Star Wars", 1977), Movie("THX 1138", 1971)]

    try:
        session.add(m1)
        session.add(d2)
        session.commit()
    except:
        session.rollback()

    alldata = session.query(Movie).all()
    for somedata in alldata:
        print somedata

<\code>

with as error:


2011-02-08 21:50:47,553 INFO sqlalchemy.engine.base.Engine.0x...ef0L
PRAGMA table_info("directors")
2011-02-08 21:50:47,553 INFO sqlalchemy.engine.base.Engine.0x...ef0L
()
Traceback (most recent call last):
  File "D:\Documents\Code\NetBeans\test\alchemy\src\alchemy.py", line
49, in <module>
    m1.director = Director("JJ Abrams")
  File "C:\Python27\lib\site-packages\sqlalchemy\orm\attributes.py",
line 158, in __set__
2011-02-08 21:50:47,555 INFO sqlalchemy.engine.base.Engine.0x...ef0L
PRAGMA table_info("movies")
2011-02-08 21:50:47,555 INFO sqlalchemy.engine.base.Engine.0x...ef0L
()
    self.impl.set(instance_state(instance),
AttributeError: 'Movie' object has no attribute '_sa_instance_state'

Can anyone shed some light or explain the error message?

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to