But this is all in one file, create_all() after all classes defining
the model are loaded.
I noticed earlier I accidentally posted the error twice, here is the
source code. Could you try running this and see if you run into the
same problem.
Again this all one file. This is also my first week with sqlalchemy
so if there happens to be something that I should change feel free to
tell me. I'm just trying to learn another way to '
program for the web, been using PHP for years. Generally I don't use
ORM but this one caught my eye, and I thought I would give it a try.
<BEGIN CODE>
#!/usr/bin/env python
########################################################################
#
#
# MODEL
#
#
#
########################################################################
import sqlalchemy
from sqlalchemy import Table, Column, Integer, String, MetaData,
ForeignKey
from sqlalchemy.orm import relation, backref
from sqlalchemy.orm import mapper
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import mapper
# engine is the connection to the database
engine = create_engine('sqlite:///:memory:', echo=True) # TODO: Move
to a Conf file
Base = declarative_base(bind=engine)
class Test(Base):
""" ORM for Tests. """
__tablename__ = "tests"
id = Column(Integer, primary_key=True)
name = Column(String(50))
def __init__(self,name):
""" Accepts a name for a test """
#TODO: Ensure valid input
self.name = name
class Question(Base):
""" ORM for Questions. """
__tablename__ = "questions"
id = Column(Integer, primary_key=True)
test_id = Column(Integer, ForeignKey("tests.id"))
question = Column(String)
test = relation(Test, backref=backref('questions', order_by=id))
def __init__(self,test_id, question):
""" Accepts a test_id and a question to sign that test """
#TODO: Ensure valid input
self.question = question
self.test_id = test_id
class Answer(Base):
""" ORM for Answers. """
__tablename__ = "answers"
id = Column(Integer, primary_key=True)
question_id = Column(Integer, ForeignKey("questions.id"))
answer = Column(String)
correct = Column(String(1), default='n') # y for correct n for not
question = relation(Question, backref=backref('answers',
order_by=id))
def __init__(self,question_id,answer,correct=0):
""" Accepts a question_id and a answer to assign to that
question.
Optionally it accepts correct, y for correct, n for not
Default for correct is n"""
#TODO: Ensure vaild input
self.question_id = question_id
self.answer = answer
self.correct = correct
def setup_model():
Base.metadata.create_all(engine) # Create all tables
# Session class is how we talk to the engine (database)
global Session
Session = sessionmaker(bind=engine)
########################################################################
#
#
# VIEW/CONTROLLER
#
# Will Seperate Later
#
#
#
########################################################################
import cherrypy
class WebTest(object):
""" Cherrypy server root """
def __init__(self):
setup_model()
def header(self):
""" Defines a header to be used for web pages... Should be
temporary """
return "<html><head><title>pyWebTest</title></head><body>"
def footer(self):
""" Defines a footer to be used for web pages... Should also
be temporary """
return "</body></html>"
@cherrypy.expose()
def index(self):
""" Root page for pyWebTest server """
output = 'Begin Test <br />'
session = Session()
test = Test("network+")
session.add(test)
output = output + str(session.new) + '<br />'
session.commit()
output = output + str(session.new) + '<br />'
print session.dirty
return self.header() + output + self.footer()
def main():
cherrypy.quickstart(WebTest())
return 0
if __name__ == '__main__': main()
<END CODE>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---