On 13/01/2011 10:12 PM, Oleg Broytman wrote:
On Thu, Jan 13, 2011 at 09:36:03PM +0000, Timothy W. Grove wrote:
I want to update an existing database by adding a new column
(UnicodeCol) to an existing table. Can anyone suggest a way to
automatically accomplish this through sqlobject ?
It could be as simple as
Table.sqlmeta.addColumn(UnicodeCol('name'), changeSchema=True)
Oleg.
This has been working for me, but I've come across a problem in my
approach to using it; perhaps someone can suggest an alternative?
When I first start my application and connect (sqlhub.processConnection)
to a database (SQLite) I run the following function to update it:
def SignEntryUpdate():
try:
SignEntry.sqlmeta.addColumn(PickleCol("explanatory_map"),
changeSchema=True)
except:
pass #database already has this column
The first time I connect to a database which requires updating all is
fine; the column is added and I can access it through the class with the
SignEntry instance attribute 'explanatory_map'. But after the
application is closed and I open it again connecting to the updated
database, trying to access the column through the class just leads to
the AttributeError: 'SignEntry' object has no attribute
'explanatory_map'. But of course this would happen as it was through the
updating process that the attribute was added, it would not be added if
the database didn't need updating.
If I kept the attribute as part of the class definition as in the
following code, then the update process fails and the new column is not
added:
class SignEntry(SQLObject):
explanatory_map = PickleCol()
It seems to me that there should be a simple way to add the attribute to
the class if the column has been added already, or not if it has been
added through updating; the "how to" do that is escaping me at the
moment. Any and all suggestions welcomed.
I've also experimented with reading the class description from the
database using "class sqlmeta: fromDatabase = True" but I don't think
this works with the sqlite backend. The "sqlobject-admin" tool also
looks promising as a way to update databases, but I'm not too sure how
far this has been developed after reading the documentation at
http://sqlobject.org/sqlobject-admin.html ?
Thanks for any help you can give.
Best regards,
Tim
p.s. by the way, I had been using version 0.13 of sqlobject as I
couldn't find an installer for 0.15 under python 2.7, but I have since
downloaded and manually installed the version for 2.6 from
http://pypi.python.org/pypi/SQLObject/0.15.0 and it seems to be working
fine for me, under Windows 7.
------------------------------------------------------------------------------
What You Don't Know About Data Connectivity CAN Hurt You
This paper provides an overview of data connectivity, details
its effect on application quality, and explores various alternative
solutions. http://p.sf.net/sfu/progress-d2d
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss