On Wed, Feb 3, 2016 at 3:54 PM, Alex Hall <ah...@autodist.com> wrote:
> Hello list, > I'm new to SQLAlchemy, but not to Python. I have an application that's > coming together, and relies on SQLAlchemy to talk to a database for > many of the app's functions. Listing tables, listing records, updating > records, pulling records for internal use, and so on. > > My app is working, but so far I've been writing the framework and GUI > with a bit of SQLite just to check that things are working how I want. > Now, though, I'm getting into my first "real" user-facing database > task: taking the values from a dialog and updating a record according > to those values. Thus far, I'm having no luck. > > My organization for now is DBInterface.py, which holds all my table > definitions, database details, and my base, session, and engine > objects. I can hear the groans from here; I do plan to move the table > definitions into a module of their own at some point, there simply > hasn't been a need yet. GUIManager.py imports DBInterface, and handles > all the GUI stuff, as the name suggests. It's where, eventually, I'll > take user input and use it to update records by calling functions from > DBInterface. That's the problem, though. In GUIManager, I have a > simple test: > > self.records[self.selectedRecordIndex].name="test name" #records is > the list of objects returned by querying the current table > > Which errors out every time: > AttributeError: can't set attribute > > (Yes, "name" is an attribute name of my Customer class.) From what > I've read thus far, updating records is as easy as modifying their > properties and calling session.commit(). That isn't working, though. I > imagine the problem is that the records in a query aren't the same as > the records originally created, and modify/commit only works on those > originals. I'm not sure if that's right, though. If it is, how could I > modify the originals, given that I run a new query each time the user > selects a table name in my GUI's list of names? If I'm wrong, how > would I update the record attributes and save the changes back to the > database? I think I'm picturing this whole thing wrong, to be honest. > Thanks for any help, and please let me know if I need to provide more > code or context. > > Is your query against a single mapped class, or is it against some set of columns? What do you get if you write: print type(self.records[self.selectedRecordIndex]) print repr(self.records[self.selectedRecordIndex]) ...at the point where you are trying to set the name? Simon -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.