Yes indeed there is a problem. It seems the dbm modules were not being
closed/synced when Python is exited, you have to explicitly close the
file.
I've made a fix to CVS (DBConnection.py) for this.
On Tue, 2003-07-08 at 15:20, Mark Melvin wrote:
> OK, I don't know if this is a dumb question or not - but I am trying to
> develop using the DBM connection for now, but when I try to create the
> tables, it creates the '.db' files but there is no data saved (i.e. they
> are 0 bytes in size). I assume I am doing something wrong. I'm also
> assuming this works on Win2K, with SQLObject 0.4, and that the DBM
> filesystem is actually supposed to be a persistent format?
>
> My code is as follows (note - I changed all my StringCols to Cols with
> sqlType set just to make sure that wasn't it):
>
> from SQLObject import *
>
> __connection__ = DBMConnection('db/', debug=1)
>
> class Customer(SQLObject):
> Contacts = MultipleJoin('Contact', orderBy=['LastName',
> 'FirstName'])
> CustomerName= Col(sqlType='VARCHAR(30)', default="")
> Street = Col(sqlType='VARCHAR(35)', default="")
> Suite = Col(sqlType='VARCHAR(35)', default="")
> City = Col(sqlType='VARCHAR(20)', default="")
> Province = Col(sqlType='VARCHAR(15)', default="")
> PostalCode = Col(sqlType='VARCHAR(7)', default="")
> PhoneNumber1= Col(sqlType='VARCHAR(20)', default="")
> FaxNumber = Col(sqlType='VARCHAR(20)', default="")
>
> class Contact(SQLObject):
> Customer = ForeignKey('Customer')
> LastName = Col(sqlType='VARCHAR(15)', default="")
> FirstName = Col(sqlType='VARCHAR(15)', default="")
> Title = Col(sqlType='VARCHAR(25)', default="")
> PhoneNumber1= Col(sqlType='VARCHAR(20)', default="")
> PhoneNumber2= Col(sqlType='VARCHAR(20)', default="")
> Notes = Col(sqlType='TEXT', default="")
>
> if __name__ == '__main__':
> Customer.createTable()
> Contact.createTable()
> Customer.new(CustomerName='Blow, Joe', City='Waterloo')
> c = Customer.new(CustomerName='Wankus Inc.', City='Waterloo')
> Contact.new(FirstName='Doctor', LastName='Evil', Title='The Bug
> Cahuna', Customer=c)
> print list(Customer.select())
> print list(Contact.select())
>
>
> I see the data printed fine, and the select statements work fine as well.
> It isn't saved to the file however. Do I have to close the connection or
> flush things somehow?
|