I'm learning SA.  I wrote a, purposely simple, version of the tutorial
(4.8).  It, mostly, works. However, objects which have been
instantiated and can print themselves with all their fields filled
(lines begining >>> Person), lose the contents of their "first" field
when INSERTed at commit.

I'm hoping someone will point out  where I've done something or failed
to do something that's causing the error..

Thanks

Les
++++++++++++++++++++++++++++++++++++++++++++++++++++++

Console:
 python main.py
>>>>>> dbName: sqlalTest.db
>>>>>> Creating database: sqlalTest.db
2009-06-14 22:53:53,401 INFO sqlalchemy.engine.base.Engine.0x..10
SELECT name FROM  (SELECT * FROM sqlite_master UNION ALL   SELECT *
FROM sqlite_temp_master) WHERE type='table' ORDER BY name
2009-06-14 22:53:53,401 INFO sqlalchemy.engine.base.Engine.0x..10 {}
>>>>>> Engine: Engine(sqlite:///sqlalTest.db), []
>>>>>> Session: <class 'sqlalchemy.orm.session.Sess'>, 
>>>>>> <sqlalchemy.orm.session.Sess object at 0x176a350>
Entering createTables
>>>>>> self.dbSession: <sqlalchemy.orm.session.Sess object at 0x176a350>
2009-06-14 22:53:53,402 INFO sqlalchemy.engine.base.Engine.0x..10
PRAGMA table_info("People")
2009-06-14 22:53:53,402 INFO sqlalchemy.engine.base.Engine.0x..10 {}
2009-06-14 22:53:53,403 INFO sqlalchemy.engine.base.Engine.0x..10
CREATE TABLE "People" (
        id INTEGER NOT NULL,
        "firstName" VARCHAR(30),
        "lastName" VARCHAR(30),
        "dateCreated" TIMESTAMP,
        PRIMARY KEY (id)
)


2009-06-14 22:53:53,403 INFO sqlalchemy.engine.base.Engine.0x..10 {}
2009-06-14 22:53:53,440 INFO sqlalchemy.engine.base.Engine.0x..10
COMMIT
Entering initTables
>>>>>> self.dbSession: <sqlalchemy.orm.session.Sess object at 0x176a350>
>>>>>> Person: <Person('Ferd','Berfle', '2009-06-14')>
>>>>>> Person: <Person('Fannie','Farkle', '2009-06-14')>
>>>>>> Person: <Person('Tiny','Tim', '2009-06-14')>
2009-06-14 22:53:53,443 INFO sqlalchemy.engine.base.Engine.0x..10
BEGIN
2009-06-14 22:53:53,445 INFO sqlalchemy.engine.base.Engine.0x..10
INSERT INTO "People" ("firstName", "lastName", "dateCreated") VALUES
(?, ?, ?)
2009-06-14 22:53:53,445 INFO sqlalchemy.engine.base.Engine.0x..10
[None, 'Berfle', '2009-06-14 00:00:00']
2009-06-14 22:53:53,446 INFO sqlalchemy.engine.base.Engine.0x..10
INSERT INTO "People" ("firstName", "lastName", "dateCreated") VALUES
(?, ?, ?)
2009-06-14 22:53:53,446 INFO sqlalchemy.engine.base.Engine.0x..10
[None, 'Farkle', '2009-06-14 00:00:00']
2009-06-14 22:53:53,447 INFO sqlalchemy.engine.base.Engine.0x..10
INSERT INTO "People" ("firstName", "lastName", "dateCreated") VALUES
(?, ?, ?)
2009-06-14 22:53:53,447 INFO sqlalchemy.engine.base.Engine.0x..10
[None, 'Tim', '2009-06-14 00:00:00']
2009-06-14 22:53:53,449 INFO sqlalchemy.engine.base.Engine.0x..10
COMMIT
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SOURCE:
import datetime,os
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, Column, Integer, String, DateTime,
MetaData, \
  ForeignKey, create_engine
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class Database(object):
  global Person
  def __init__(self, dbName, config):
    print(">>>>>> dbName: %s") % dbName
    if os.path.exists(dbName) == False:
      print(">>>>>> Creating database: %s") % dbName
      dbUrl = 'sqlite:///' + dbName
      self.dbEngine = create_engine(dbUrl, echo=True)
      print(">>>>>> Engine: %s, %s") % (self.dbEngine,
self.dbEngine.table_names())
      Session = sessionmaker()
      Session.configure(bind=self.dbEngine) # Instance of Session
class w/dbEngine
      self.dbSession = Session()
      print(">>>>>> Session: %s, %s") % (Session, self.dbSession)

      self.createTables()
      self.initTables(config)

#
# # # Business object definitions
#

#
# # # Person object
#
  class Person(Base):
    __tablename__ = 'People'

    id          = Column(Integer, primary_key=True)
    firstName   = Column(String(30))
    lastName    = Column(String(30))
    dateCreated = Column(DateTime, default=datetime.date.today)

    def __init__(self, firstName, lastName):
      self.firstname = firstName
      self.lastName = lastName
      self.dateCreated = datetime.date.today()

    def lastNameFirst(self):
      return self.lastName + ', ' + self.firstName

    def __repr__(self):
      return "<Person('%s','%s', '%s')>" % (self.firstname,
self.lastName, self.dateCreated)
#
# # # End Business object definitions
#


#
# # # Create tables
#
  def createTables(self):
    print "Entering createTables"
    print(">>>>>> self.dbSession: %s") % self.dbSession
    Base.metadata.create_all(self.dbEngine)


#
# # # Load data from config and do basic table init
#
  def initTables(self,config):
      print "Entering initTables"
      print(">>>>>> self.dbSession: %s") % self.dbSession
      people = config.getItem('People')
      for p in people:
        person = Person(p[0],p[1])
        print(">>>>>> Person: %s") % person.__repr__()
        self.dbSession.add(person)
      self.dbSession.commit()

#
# # # Create another session
#
  def createSession(self):
    s = Session()
    return s

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to